论文笔记之PPO

article/2025/9/21 8:44:57

15年OpenAI发表了TRPO算法,一直策略单调提升的算法;17年DeepMind基于TRPO发表了一篇Distributed-PPO,紧接着OpenAI发表了这篇PPO。可以说TRPO是PPO的前身,PPO在TRPO的基础上进行改进,使得算法可读性更高,实操性更强。
论文地址,点这里
有关TRPO的论文解读,可参考我的另一篇论文笔记之TRPO
PPO作为目前比较火热的model-free类强化学习算法,在许多环境中取得了不错的效果,因此是有必要去学习的。

论文解读参考:
①OpenAI PPO强化学习算法解读
②TRPO和PPO(下)
③强化学习笔记(五)–PPO
④PPO
⑤TRPO与PPO

Note:

  1. 关于PPO,网上最大的争议点在于是否是Off-policy算法?答:PPO是On-policy算法,虽然其引入了IS因子修正,但是用于采样的策略是旧策略 π o l d \pi_{old} πold(或者说当前策略),然后用这些样本去更新当前策略 θ o l d → θ \theta_{old}\to\theta θoldθ用来学习并成为最终策略的策略叫目标策略,故采样策略和目标策略都是同一个 θ o l d \theta_{old} θold,因此PPO就是On-policy算法。和DDPG这类算法不同,虽然说从头至尾都用一个网络符号 π θ \pi_\theta πθ来表示策略,但是更新前后是有区别的,DDPG用来更新当前策略的样本来自于经验池,池子里的样本是由许多个之前不同的行为策略产生的,也就是说学习所用的数据“离开”了待学习的目标策略,因此DDPG是Off-policy的。再比如说Q-learning就更明显了,直接摆明有2个策略: g r e e d y greedy greedy ϵ − g r e e d y \epsilon-greedy ϵgreedy策略。因此可以说Off-policy算法一般都会使用IS技术,但使用IS技术的不一定是Off-policy
  2. TRPO和PPO都是为了解决策略梯度算法中学习率大小的算法,只不过PPO实现起来更加简便,效果也更好。
  3. Proximal(近端)个人认为应该指的是策略网络参数的更新是在约束范围内进行,因为有一个范围在,这个范围直觉上感觉很小,所以称之为近端。在这里插入图片描述
  4. PPO有2个版本:一个是带有可调节的KL因子版本;另一个是带有Clip技术的版本。

Proximal Policy Optimization Algorithms

  • Abstract
  • 1 Introduction
  • 2 Background: Policy Optimization
    • 2.1 Policy Gradient Methods
    • 2.2 Trust Region Methods
  • 3 Clipped Surrogate Objective
  • 4 Adaptive KL Penalty Coefficient
  • 5 Algorithm
  • 6 Experiments
    • 6.1 Comparison of Surrogate Objectives
    • 6.2 Comparison to Other Algorithm in the Continuous Domain
    • 6.3 Showcase in the Continuous Domain:Humanoid Running and Steering
    • 6.4 Comparison to Other Algorithm on the Atari Domain
  • 7 Conclusion

Abstract

1 Introduction

2 Background: Policy Optimization

2.1 Policy Gradient Methods

PPO和TRPO都是用来解决策略梯度算法中的学习率问题的,因此他们都属于策略梯度算法(PG):
∇ J ( θ ) = E ( s , a ) ∼ ρ π [ ∇ θ log ⁡ π θ ( a ∣ s ) ⋅ A π θ ( s , a ) ] (1) \nabla J(\theta)=\mathbb{E}_{(s,a)\sim\rho^\pi}[\nabla_\theta\log\pi_\theta(a|s)\cdot A^{\pi_\theta}(s,a)]\tag{1} J(θ)=E(s,a)ρπ[θlogπθ(as)Aπθ(s,a)](1)

2.2 Trust Region Methods

有关TRPO的论文解读,可参考我的另一篇论文笔记之TRPO。
TRPO的目标函数以及约束为:
m a x i m i z e θ E ( s t , a t ) ∼ ρ π θ o l d [ π θ ( s t , a t ) π θ o l d ( s t , a t ) A π θ o l d ( s t , a t ) ] (3) \mathop{maximize}\limits_{\theta}\mathbb{E}_{(s_t,a_t)\sim\rho^{\pi_{\theta_{old}}}}[\frac{\pi_\theta(s_t,a_t)}{\pi_{\theta_{old}}(s_t,a_t)}A^{\pi_{\theta_{old}}}(s_t,a_t)]\tag{3} θmaximizeE(st,at)ρπθold[πθold(st,at)πθ(st,at)Aπθold(st,at)](3) s . t . E ( s t , a t ) ∼ ρ π θ o l d [ K L [ π θ o l d ( ⋅ ∣ s t ) , π θ ( ⋅ ∣ s t ) ] ] (4) s.t.\,\,\,\mathbb{E}_{(s_t,a_t)\sim\rho^{\pi_{\theta_{old}}}}[KL[\pi_{\theta_{old}}(\cdot|s_t),\pi_\theta(\cdot|s_t)]]\tag{4} s.t.E(st,at)ρπθold[KL[πθold(st),πθ(st)]](4)Note:

  1. θ o l d \theta_{old} θold指的是当前策略,是即将更新的待更新策略,相对 π θ \pi_\theta πθ而言就是旧策略。
  2. TRPO对式(3)(4)的优化采用共轭梯度+线性搜索来处理。对式(3)采用一阶近似,对式(4)采用二阶近似。

理论上TRPO开始也是将 K L KL KL散度作为奖惩项的:
m a x i m i z e θ E ( s t , a t ) ∼ ρ π θ o l d [ π θ ( s t , a t ) π θ o l d ( s t , a t ) A π θ o l d ( s t , a t ) − β K L [ π θ o l d ( ⋅ ∣ s t ) , π θ ( ⋅ ∣ s t ) ] ] (5) \mathop{maximize}\limits_{\theta}\mathbb{E}_{(s_t,a_t)\sim\rho^{\pi_{\theta_{old}}}}[\frac{\pi_\theta(s_t,a_t)}{\pi_{\theta_{old}}(s_t,a_t)}A^{\pi_{\theta_{old}}}(s_t,a_t)-\beta KL[\pi_{\theta_{old}}(\cdot|s_t),\pi_{\theta}(\cdot|s_t)]]\tag{5} θmaximizeE(st,at)ρπθold[πθold(st,at)πθ(st,at)Aπθold(st,at)βKL[πθold(st),πθ(st)]](5)Note:

  1. 但是在TRPO中 K L KL KL因子是个很小的值,会造成学习缓慢。如果将 β \beta β当做超参数的话,对于不同环境也是难以调节。因此PPO的一个版本就专门设计了可调节的 K L KL KL因子。
  2. 实验表明,如果采样固定的奖惩因子 β \beta β,并采用 S G D SGD SGD来对式(5)做一阶近似的话,效果是不好的。因此有必要将 β \beta β改成可调节的。

3 Clipped Surrogate Objective

这是PPO的Clip版本。OpenAI的作者提出用Clip技术替代 K L KL KL散度的作用,即限制参数 θ o l d → θ \theta_{old}\to\theta θoldθ步伐过大
记IS修正因子 r t ( θ ) = π θ ( a t ∣ s t ) π θ o l d ( a t ∣ s t ) r_t(\theta)=\frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)} rt(θ)=πθold(atst)πθ(atst)。TRPO优化的目标是一种替代目标,他不直接优化 η θ n e w \eta_{\theta_{new}} ηθnew,而是优化它的一个下界。整个优化过程Kakada称之为CPI(Conservation Policy Iteration),故真正优化的目标函数称之为CPI函数: L C P I ( θ ) = E ( s t , a t ) ∼ ρ π θ o l d [ π θ ( s t , a t ) π θ o l d ( s t , a t ) A π θ o l d ( s t , a t ) ] = E [ r t ( θ ) A π θ o l d ( s t , a t ) ] (6) L^{CPI}(\theta)=\mathbb{E}_{(s_t,a_t)\sim\rho^{\pi_{\theta_{old}}}}[\frac{\pi_\theta(s_t,a_t)}{\pi_{\theta_{old}}(s_t,a_t)}A^{\pi_{\theta_{old}}}(s_t,a_t)]=\mathbb{E}[r_t(\theta)A^{\pi_{\theta_{old}}}(s_t,a_t)]\tag{6} LCPI(θ)=E(st,at)ρπθold[πθold(st,at)πθ(st,at)Aπθold(st,at)]=E[rt(θ)Aπθold(st,at)](6)
可以见得,如果不存在一个约束的话, θ o l d → θ \theta_{old}\to\theta θoldθ将会很大,会导致策略提升失效,从而无法解决PG算法的学习率大小问题。

那么PPO的Clip版本的替代函数是什么呢?
PPO的Clip版本的优化的目标也是基于TRPO的优化目标(式(6)),本质上两者都是CPI函数,优化的都是真正回报 η θ n e w \eta_{\theta_{new}} ηθnew的近似
记Clip超参数 ϵ = 0.2 \epsilon=0.2 ϵ=0.2,则PPO优化目标:
L C L I P ( θ ) = E ( s t , a t ) ∼ ρ π θ o l d [ min ⁡ { r t ( θ ) A π θ o l d , c l i p ( r t ( θ ) , 1 − ϵ , 1 + ϵ ) A π θ o l d } ] (7) L^{CLIP}(\theta)=\mathbb{E}_{(s_t,a_t)\sim\rho^{\pi_{\theta_{old}}}}[\min\{r_t(\theta)A^{\pi_{\theta_{old}}},clip(r_t(\theta), 1-\epsilon,1+\epsilon)A^{\pi_{\theta_{old}}}\}]\tag{7} LCLIP(θ)=E(st,at)ρπθold[min{rt(θ)Aπθold,clip(rt(θ),1ϵ,1+ϵ)Aπθold}](7)
C l i p Clip Clip目标函数有2大特征
①用下图即可说明PPO设置 C l i p Clip Clip的意义:在这里插入图片描述用一句话概括就是 C l i p Clip Clip的存在是为了限制 θ o l d → θ \theta_{old}\to\theta θoldθ更新幅度过大,这个更新方向可能使得 π \pi π是增大的,也可能是减小的,这取决于Critic和0的关系。根据PG理论: A ≥ 0 A\ge0 A0,则鼓励 θ \theta θ的更新朝着 π θ \pi_\theta πθ增大的方向移动; A ≤ 0 A\leq0 A0,则鼓励 θ \theta θ的更新朝着 π θ \pi_\theta πθ减小的方向移动。
Note:

  1. 虽然理论上说 K L KL KL散度优化目的是让2个分布输出的动作概率一致,而非策略参数一致。但是实际上对于2个不同参数的分布,要做到对于状态空间 S \mathcal{S} S的每一个状态都对应的概率密度(离散下为概率)相等,是很难的,如下图所示:在这里插入图片描述因此 m i n i m i z e θ K L ( π θ o l d ( ⋅ ∣ s ) ∣ ∣ π θ ( ⋅ ∣ s ) ) \mathop{minimize}\limits_\theta KL(\pi_{\theta_{old}}(\cdot|s)||\pi_\theta(\cdot|s)) θminimizeKL(πθold(s)πθ(s))的结果往往是 θ o l d ≈ θ \theta_{old}\approx\theta θoldθ。因此无论是 K L KL KL散度还是 C l i p Clip Clip,其优化的结果就是使2个策略的参数趋于一致
  2. 通过 C l i p Clip Clip技术限制住 r ( θ ) r(\theta) r(θ)一来可以保证策略提升不会失效;二来可以保证IS处理后的方差不会过大从而保证IS的有效性。

②: L C L I P L^{CLIP} LCLIP可作为选取目标函数的一个保守的下界。如下图所示:在这里插入图片描述图中横坐标可以理解为参数从开始更新到更新完毕的过程。纵坐标为 K L ( θ o l d ∣ ∣ θ ) KL(\theta_{old}||\theta) KL(θoldθ)值。从图中可看出以 L C L I P L^{CLIP} LCLIP为目标对于参数更新步伐的控制较强,更新“保守”

4 Adaptive KL Penalty Coefficient

第三节讲述了PPO的 C l i p Clip Clip版本,这一节讲述PPO的另一个版本——采用可调节的 K L KL KL散度因子。
算法的大致步骤为:
在这里插入图片描述Note:

  1. 算法涉及3个超参数: β 、 d t a r g 、 ( 1.5 , 2 ) \beta、d_{targ}、(1.5,2) βdtarg(1.5,2),但这三者的敏感性很低,调节并不是很麻烦。
  2. 效果比 L C L I P L^{CLIP} LCLIP要差,但是可作为一个baseline。
  3. 采用SGD做一阶优化。

5 Algorithm

回顾一下:第三节介绍了基于TRPO的 L C L I P L^{CLIP} LCLIP算法;第四节介绍了基于TRPO的 L K L P E N L^{KLPEN} LKLPEN算法。这一节开始介绍完整的PPO算法。
PPO算法的完整目标函数:
L t C L I P + V F + S ( θ ) = E ( s t , a t ) ∼ ρ π θ o l d [ L t C L I P ( θ ) − c 1 L t V F ( θ ) + c 2 S [ π θ ] ( s t ) ] (9) L_t^{CLIP+VF+S}(\theta)=\mathbb{E}_{(s_t,a_t)\sim\rho^{\pi_{\theta_{old}}}}[L_t^{CLIP}(\theta)-c_1L_t^{VF}(\theta)+c_2S[\pi_\theta](s_t)]\tag{9} LtCLIP+VF+S(θ)=E(st,at)ρπθold[LtCLIP(θ)c1LtVF(θ)+c2S[πθ](st)](9)Note:

  1. c 1 , c 2 c_1,c_2 c1,c2为2个超参数, S S S为信息熵增加探索率, L t V F L_t^{VF} LtVF为训练Critic网络 V θ V_\theta Vθ的损失函数。
  2. 这里采用 L C L I P L^{CLIP} LCLIP作为替代函数。

优势函数的估计基于以下式子:
A t = − V ( s t ) + [ r t + γ t + 1 + ⋯ + γ T − t − 1 r T − 1 + γ T − t V ( s T ) ] (10) A_t=-V(s_t)+[r_t+\gamma_{t+1}+\cdots+\gamma^{T-t-1}r_{T-1}+\gamma^{T-t}V(s_T)]\tag{10} At=V(st)+[rt+γt+1++γTt1rT1+γTtV(sT)](10)Note:

  1. 式(10)第一部分的 V V V通过价值网络得到, V V V网络的训练遵从: m i n i m i z e θ E ( s t , a t ) ∼ ρ π θ o l d [ 1 2 ( V θ ( s t ) − V t t a r g ( s t ) ) 2 ] \mathop{minimize}\limits_\theta\mathbb{E}_{(s_t,a_t)\sim\rho^{\pi_{\theta_{old}}}}[\frac{1}{2}(V_\theta(s_t)-V_t^{targ}(s_t))^2] θminimizeE(st,at)ρπθold[21(Vθ(st)Vttarg(st))2]
  2. 式(10)的第二部分是一个T步的 Q Q Q,它通过MC采样结果相加可得。

整个PPO算法的伪代码如下:在这里插入图片描述Note:

  1. PPO算法拥有Actor-Critic算法的框架。
  2. 算法中分成了 N N N个Actor去做T步的探索,一共收集 N ∗ T N*T NT个样本,然后进行训练过程中,采集 M ≤ N T M\leq NT MNT个样本做mini-batch,更新 θ o l d → θ \theta_{old}\to\theta θoldθ从这里就可以看出PPO是如何利用样本训练的以及PPO是一个On-policy算法,因为目标策略 θ o l d \theta_{old} θold的更新和行为策略 θ o l d \theta_{old} θold是同一个。
  3. PPO的训练中T步是固定的长度,其值远小于一个episode的长度。
  4. PPO的自动调节 K L KL KL因子版本伪代码如下:在这里插入图片描述

6 Experiments

6.1 Comparison of Surrogate Objectives

这一小节用于对比三种替代目标函数 L C P I 、 L C L I P 、 L K L P E N L^{CPI}、L^{CLIP}、L^{KLPEN} LCPILCLIPLKLPEN,其中 L K L P E N L^{KLPEN} LKLPEN还包括固定和自动调节的 β \beta β
实验设置:

  1. 超参数:除了 c l i p clip clip版本有专属的 ϵ \epsilon ϵ,奖惩 K L KL KL版本有专属的 ( β , d t a r g ) (\beta,d_{targ}) (β,dtarg),其余都一样的设置:在这里插入图片描述

  2. 网络设置:用神经网络来表示策略。

  3. 其他:实验环境来自于OpenAI-Gym的Mujoco仿真模拟器。一共涉及7种环境,每种环境设置3个随机种子。评价指标为7*3=21个结果的平均值。

实验结果如下:
在这里插入图片描述

  1. 从实验结果来看, L C L I P L^{CLIP} LCLIP版本的表现要较好于其他三种。
  2. 显然失去了参数更新限制的 L C P I L^{CPI} LCPI表现拉跨,因为参数 θ o l d → θ \theta_{old}\to\theta θoldθ不设限,导致策略提升失效以及IS修正失效。

6.2 Comparison to Other Algorithm in the Continuous Domain

这一小节是将PPO算法与其他算法在同一环境是的比较。
上一轮胜出的是 c l i p clip clip版本的PPO,所以这一节拿 c l i p clip clip版本的PPO与其余5种算法对比,实验结果如下:在这里插入图片描述从实验结果来看,显然PPO的表现力要好于其余5位

6.3 Showcase in the Continuous Domain:Humanoid Running and Steering

这一节是测试PPO(自动调节 β \beta β版本)在高维连续动作空间环境Humanoid上的表现效果。实验分三种难度,从低到高分别是:①RoboschoolHumanoid-v0②RoboschoolHumanoidFlagrun-v0③RoboschoolHumanoidFlagrunHarder
实验所涉及到的超参数如下:
在这里插入图片描述

实验效果图如下:
在这里插入图片描述
实验结果如下:
在这里插入图片描述
从实验结果来看,PPO在高维连续空间task的表现力还是不错的,面对高维task的时候,PPO是一个不错的baseline

6.4 Comparison to Other Algorithm on the Atari Domain

这一节测试的是PPO算法和其余2种算法A2C、ACER在Atari环境中的表现对比。
一共测试49种Atari游戏。PPO的超参数如下:在这里插入图片描述其余2种算法的超参数已经调节到最好效果了。
实验分2个评价指标,评价值是49局游戏里获胜的次数,实验结果如下:
在这里插入图片描述
从实验结果来看,PPO在Atari领域还是可行的一种算法。

7 Conclusion

  1. PPO是一种Policy-based方法。
  2. PPO是一种On-policy的随机策略算法。
  3. PPO=(Policy-Gradient)+(Importance-Sampling)+(KL散度),即它的目标函数基于PG,然后利用IS技术提高采样效率,同时为了避免IS中前后策略相差太大而引入 K L KL KL散度。和TRPO不同的是,PPO的KL散度是作为奖惩项放在目标函数中的,并且引入自动调节的 K L KL KL因子 β \beta β
  4. PPO也可以理解成PPO=(TRPO-constraint)+(clip)=(TRPO-constraint)+(adaptive- β \beta β),即PPO是一种基于TRPO且有2个版本的RL算法。
  5. 为了降低 K L KL KL散度计算的复杂度,PPO引入 C l i p Clip Clip技术将 ( θ o l d , θ ) (\theta_{old},\theta) (θold,θ)限定在一定范围内。
  6. TRPO对约束使用了二阶近似,而PPO只使用了一阶,并弃用了难度较大的共轭梯度以及线性搜索算法,故PPO更易实现且效果更好。
  7. 可用于作为一个较为保守的替代目标。一般来说,CPI函数和CLIP函数都是对真正目标 η \eta η的近似。

http://chatgpt.dhexx.cn/article/t4yefeqb.shtml

相关文章

PPO实战学习总结

PPO used in go-bigger 前段时间一直在学习ppo算法,写了 一点总结,记录一下自己对ppo算法的一些理解与RL实战时候容易遇到的一些问题。代码地址如下,需要的可以自取: https://github.com/FLBa9762/PPO_used_in_Gobigger.git一般…

PPO算法

在线学习和离线学习 在线学习:和环境互动的Agent以及和要学习的Agent是同一个, 同一个Agent,一边和环境做互动,一边在学习。离线学习: 和环境互动及的Agent以和要学习的Agent不是同一个,学习的Agent通过看别人完来学习。 利用新的…

PPO2代码 pytorch框架

PPO2代码玩gym库的Pendulum环境 2022-8-02更新 我发现这篇文章浏览量惨淡啊。 咋滴,是不相信的我代码能用是吗? 所以,我给出reward的收敛曲线图: 开玩笑,出来混,我能卖你生瓜码子吗? ———…

PPO实战

哈哈初学,复现龙龙老师的实例! state:是平衡小车上的杆子,观测状态由 4 个连续的参数组成:推车位置 [-2.4,2.4],车速 [-∞,∞],杆子角度 [~-41.8&#xff0c…

PyTorch实现PPO代码

原理:Proximal Policy Optimization近端策略优化(PPO) 视频:Proximal Policy Optimization (PPO) is Easy With PyTorch | Full PPO Tutorial 代码来自github: Youtube-Code-Repository EasyRL 网站:Neural…

优化PPO

优化PPO 介绍core implementation details1.Vectorized architecture 量化结构Orthogonal Initialization of Weights and Constant Initialization of biases 算法权重的初始化以及恒定偏差的初始化The Adam Optimizer’s Epsilon Parameter Adam优化器的ε参数Adam Learning …

PPO Algorithm

‘‘目录 PPO ALGORITHM 进行看别人文章: 如何直观理解PPO算法?[理论篇] - 知乎 (zhihu.com) 【强化学习8】PPO - 知乎 (zhihu.com) PPO(OpenAI) Proximal Policy Optimization(PPO)算法原理及实现! - 简书 (jianshu.com) 1-Critic的作用与效果.m…

PPO算法实战

原理简介 PPO是一种on-policy算法,具有较好的性能,其前身是TRPO算法,也是policy gradient算法的一种,它是现在 OpenAI 默认的强化学习算法,具体原理可参考PPO算法讲解。PPO算法主要有两个变种,一个是结合K…

Proximal Policy Optimization(近端策略优化)(PPO)原理详解

本节开始笔者针对自己的研究领域进行RL方面的介绍和笔记总结,欢迎同行学者一起学习和讨论。本文笔者来介绍RL中比较出名的算法PPO算法,读者需要预先了解Reinforcement-Learning中几个基础定义才可以阅读,否则不容易理解其中的内容。不过笔者尽…

【强化学习PPO算法】

强化学习PPO算法 一、PPO算法二、伪代码三、相关的简单理论1.ratio2.裁断3.Advantage的计算4.loss的计算 四、算法实现五、效果六、感悟 最近再改一个代码,需要改成PPO方式的,由于之前没有接触过此类算法,因此进行了简单学习,论文…

【深度强化学习】(6) PPO 模型解析,附Pytorch完整代码

大家好,今天和各位分享一下深度强化学习中的近端策略优化算法(proximal policy optimization,PPO),并借助 OpenAI 的 gym 环境完成一个小案例,完整代码可以从我的 GitHub 中获得: https://gith…

autoit连接mysql数据库

原链接点我 一,准备工作 1, 下载mysql.au3(这个点击就下载了) 把mysql.au3放入到autoit的include目录下 2, 下载mysql驱动(根据自己系统选,下载完之后,双击运行会自动安装,一路next就行) 二,使用 #include "mysql.au3" #include <Array.au3> ;弹窗 Func aler…

AutoIt-v3的安装,和robotframework-autoitlibrary的导入

AutoIt 最新是v3版本&#xff0c;这是一个使用类似BASIC脚本语言的免费软件,它设计用于Windows GUI&#xff08;图形用户界面)中进行自动化操作。它利用模拟键盘按键&#xff0c;鼠标移动和窗口/控件的组合来实现自动化任务。而这是其它语言不可能做到或无可靠方法实现的。 Au…

selenium 上传下载调用windows窗口--AutoIT

AutoIT解决自动化上传下载文件调用Windows窗口 AutoIT下载安装使用AotuIt 操作windows上传窗口1. 打开AutoIt定位窗口组件2. 定位上传窗口属性 &#xff08;鼠标选中Finder Tool 拖拽至属性窗口&#xff09;3. 打开autoIt编辑器&#xff0c;编写代码4. 将脚本文件转成exe文件5.…

软件质量保证与测试 实验十一:AutoIt的使用

目录 实验概述实验内容1. 下载安装AutoIT。2. 测试win系统自带计算器程序&#xff0c; 246&#xff0c;是否正确&#xff1f; 写出Script。&#xff08;小提示&#xff1a;使用WinGetText获得输出&#xff09;3.测试win系统自带计算器程序&#xff0c; 写出3个以上的测试用例的…

selenium 用autoIT上传下载文件

一、下载安装AutoIT 下载并安装AutoIT&#xff0c;下载链接&#xff1a;https://www.autoitscript.com/site/autoit/AutoIT安装成功后&#xff0c;可以在开始菜单下看到AutoIT的所有工具&#xff0c;如下图所示&#xff1a; 其中分为几类&#xff0c;AutoIT Window Info用来识…

selenium autoit java_selenium+java利用AutoIT实现文件上传

转载自&#xff1a;https://www.cnblogs.com/yunman/p/7112882.html?utm_sourceitdadao&utm_mediumreferral 1、AutoIT介绍 AutoIT是一个类似脚本语言的软件&#xff0c;利用此软件我们可以方便的实现模拟键盘、鼠标、窗口等操作&#xff0c;实现自动化。 2、实现原理 利用…

autoIT 自动化上传/下载文件图文详解【python selenium】

情景&#xff1a; 在用selenium进行web页面自动化时&#xff0c;时不时会遇到上传附件的情况&#xff0c;常见的情况就是一个上传按钮&#xff0c;点击后弹出windows窗口&#xff0c;选择文件后上传&#xff0c;如下图1所示 图1 这种情况超出了selenium的能力范围&#xff0c;需…

AutoIt介绍

AutoIt的下载网址&#xff1a; https://www.autoitscript.com/site/autoit/downloads/ AutoIt在线文档&#xff1a;http://www.autoit3.cn/Doc/ AutoIt的优势&#xff1a; 简单易懂的类BASIC 表达式模拟键盘,鼠标动作事件操作窗口与进程直接与窗口的”标准控件”交互(设置/获…

AutoIt的应用

少数情况下需要操作系统级的弹窗&#xff0c;可以使用AutoIt。 AutoIt现在最新版是V3版本&#xff0c;这是一个类似BASIC脚本语言的免费软件&#xff0c;用于Windows GUI中进行自动化操作。利用模拟键盘按键&#xff0c;鼠标移动&#xff0c;窗口和控件的组合来实现自动化任务…