跳到主要内容

同时操作多个网页

当需要同时操作多个网页时需要使用并行循环列表指令。列表元素类型任意,没有任何要求,列表有几个元素就会开启几个并行任务。

示例

  • 依次打开5个网页,然后同时输入留言并点击提交
  • 同时在多个比特浏览器/AdsPower窗口分别登录不同的账号。搭建的流程和普通的列表循环类似,只是普通列表循环顺序执行的,并行循环列表同时执行的。

普通列表循环执行顺序:并行循环列表执行顺序:

打开网页 输入账号 输入密码 点击登录 打开网页 输入账号 输入密码 点击登录 打开网页 输入账号 输入密码 点击登录 ...

并行任务A并行任务B并行任务C并行任务...

打开网页


输入账号 输入密码


点击登录

打开网页 输入账号 输入密码


点击登录





打开网页 输入账号 输入密码


点击登录

...

并行循环时,同一个任务中的流程按顺序执行(串行),例如每个任务都是按照 打开网页-输入账号-输入密码-点击登录 顺序依次执行。

并行任务之间互相独立,完全不关心其他任务执行速度。例如并行任务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

相关链接

操作指定的比特浏览器/AdsPower窗口