首页 > 解决方案 > Perl Selenium::Remote::驱动程序和线程

问题描述

我有一个我正在使用 Selenium::Remote::Driver 在 perl 中编写的程序,该程序也使用线程。

S:R:D 不是线程友好的吗?当我启动一个线程并尝试打开一个 selenium 驱动程序实例时,我会得到一个随机错误(手头上没有,我已经过去了)。现在,我设置了一个共享变量,使其一次只有一个 selenium 实例正在执行命令,但我仍然遇到错误,现在是在 selenium 实例中设置 cookie。

有没有解决的办法?

例如,这就是我的程序的运行方式:

他们都将驱动程序设置为

$driver = Selenium::Remote::Driver->new( 'auto_close' => 0,
                          'browser_name' => 'chrome',
                           extra_capabilities' => { 
                            'chromeOptions' => {
                       'args' => ['window-size=1920,1080',
                            'blink-settings=imagesEnabled=false']}});

[线程 1] 开始
[线程 2] 开始
[线程 2] 随机赢得先启动 selenium 的竞赛,
做事 [线程 1] 等待线程 2 完成执行 selenium 命令。
....快进两个线程都已完成设置....
[线程 1] 现在赢得比赛并开始在他们的输入代码中设置一个 cookie,这里是我们所在网页上的 selenium 实例,www.mywebsite.com

$driver->add_cookie("anything", "1", "/", 'www.mywebsite.com','1','1');

由于错误,该线程最终终止

Thread 1 terminated abnormally: Error while executing command: invalid argument: invalid argument: invalid 'secure' (Session info: chrome=81.0.4044.129) at /Library/Perl/5.18/Selenium/Remote/Driver.pm line 402 thread 1. at /Library/Perl/5.18/Selenium/Remote/Driver.pm line 353 thread 1.

不管我们把它改成什么,这仍然会出错,有人有什么想法吗?这真的只是线程不友好,我必须尝试其他方法吗?

标签: multithreadingseleniumperl

解决方案


推荐阅读