multithreading - 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.
不管我们把它改成什么,这仍然会出错,有人有什么想法吗?这真的只是线程不友好,我必须尝试其他方法吗?
解决方案
推荐阅读
- android - 从适配器获取值到主要活动
- virtual-machine - 裸机上的硬件物理行为与使用 IOMMU 直通的 VM 有什么区别?
- json - 如何防止在 ASP.net Core 中直接从浏览器调用 Ajax JSON
- python - 全局变量似乎被执行递归代码破坏了
- java - 在数据库而不是java中生成json文件
- reactjs - 带有 React 路由器的 TypeScript
- python-3.x - 无法在 Windows10 上运行 PyGlossary
- react-native - 无法将 expo react 本机应用程序上传到 github 存储库:“更新文件内容失败。EISDIR:对目录.read 的非法操作”
- python - 如何让 VS Code 的 jupyter notebook 的 codetext 加粗?
- algorithm - 将两色树转换为二分树