同时操作多个网页
当需要同时操作多个网页时需要使用并行循环列表指令。列表元素类型任意,没有任何要求,列表有几个元素就会开启几个并行任务。
示例
- 依次打开5个网页,然后同时输入留言并点击提交

- 同时在多个比特浏览器/AdsPower窗口分别登录不同的账号。搭建的流程和普通的列表循环类似,只是普通
列表循环是顺序执行的,并行循环列表是同时执行的。

普通列表循环执行顺序: | 并行循环列表执行顺序: | ||||||||
|
|
并行循环时,同一个任务中的流程按顺序执行(串行),例如每个任务都是按照 打开网页-输入账号-输入密码-点击登录 顺序依次执行。
并行任务之间互相独立,完全不关心其他任务执行速度。例如并行任务B执行到输入密码时,A才开始输入账号,C才开始打开网页。 本次并行任务B执行最快,但下次执行登录流程时最快的可能是A,也可能是C,还可能仍旧是B。
等待UI锁
锁在编程中可以保证多个并行任务同一时刻只有一个在运行。
以工厂流水线为例,每条流水线都会依次执行焊接、打磨、喷漆、抛光等流程。每条流水线都会用到电焊,当前工厂有多条流水线,但只有一台电焊机,
当流水线A在使用电焊机时,流水线B也想用,流水线B很霸道,不管别人是否在用直接抢走了电焊机,流水线A的电焊工没了电焊机直接罢工了,导致流水线A的后续流程问题百出。
这时就需要制定规则,当某条流水线x想要使用电焊机时,若此时没人用,那么可以直接用,若其他流水线正在使用,那么必须暂停当前的流水线x,直到别人不再使用电焊机时才可以重新启动流水线x并使用电焊机。
这个规定就相当于锁,鼠标、键盘这种共享的设备就相当于电焊机。当同时操作多个网页时多条流水线很可能会抢夺鼠标、键盘,例如当任务1想要从A点拖动到B点时,刚拖动了一半,
这时并行任务2开始从C点拖动到D点,那么任务1的后续流程必然会问题百出。再比如任务3想要输入Ctrl+C,刚按下Ctrl,还没来得及按C,这时并行任务4输入了Q,导致当前的窗口直接关闭了。
因此必须要加锁阻止这种抢夺行为,加锁可以分为3个阶段,1.尝试获取锁,2.持有锁,3.释放锁。
曲辕内置的输入、点击、鼠标拖动等相关指令默认会自动加锁,因此同一时刻只有一个任务可以点击、输入、拖动,其他任务需要点击、输入、拖动时会自动暂停执行,直到点击、输入、拖动执行完后才可以自动恢复执行。
虽然内置的指令自动添加了锁,但并行流程搭建不当仍旧可能出现非预期行为。
例如下面的流程同时打开多个网页然后识别滑块验证码并拖动,虽然任务1拖动鼠标时其他任务无法拖动,但当任务1即将开始拖动鼠标时,任务2突然执行了打开网页,
这时任务2的网页会挡住任务1的网页,此时任务1开始拖动了,却是在任务2的网页上拖动的,任务1的网页并没有拖动滑块,任务2的网页本不该拖动却拖动了,两个任务的网页都出现了问题,后续流程完全不可控了。
你可能会想到在拖动前通过激活网页指令先切换到正确的网页,虽然激活网页确实可以切换到正确的网页,当激活网页执行完成后,任务2可能突然执行了打开网页,所以问题依旧存在。
这时你就需要使用等待UI锁指令了,你只需要把激活网页和鼠标拖动指令添加到等待UI锁中,这时当某个任务执行到等待UI锁中的激活网页或者鼠标拖动指令时,其他任务无法执行点击、输入、鼠标拖动等指令,会进入等待状态,
直到等待UI锁中的指令执行完毕后其他任务才可以执行点击、输入、鼠标拖动等操作。执行等待UI锁时会尝试获取锁,若其他任务没有持有锁则能获取并继续执行缩进的指令,
若锁被其他任务持有则当前任务会自动暂停执行,直到锁被其他任务释放。当等待UI锁中的子指令全部执行完毕后该任务会自动释放锁。
你可能觉得直接把等待UI锁指令放到最前面可以一劳永逸,但这时并行任务会变成串行执行,任务C执行完鼠标拖动后任务D才开始打开网页,任务D鼠标拖动完成后任务B才开始打开网页...

- 如果元素支持 静默点击、静默输入 的话建议优先使用 静默输入、静默点击,运行速度会更快
- 您需要先安装比特浏览器/AdsPower插件,参考安装比特浏览器/AdsPower插件
- 曲辕RPA插件版本 >= 2.0.0