不能启动超过 17 个Selenium网络驱动程序



我在python多线程环境中使用Selenium和ChromeDriver。在开始多处理之前,将设置每个浏览器实例。可以毫无问题地启动17个浏览器,但如果超过17个实例,则会失败。

以下是浏览器webdriver.Chrome(service_log_path=self.session_logfile):的日志输出

工作实例(实例#17(:

[…]
[1640642658.135][INFO]: [d95aa29866064789c167e42c4911ed36] RESPONSE SetTimeouts
[1640642658.136][INFO]: [d95aa29866064789c167e42c4911ed36] COMMAND Navigate {
"url": "https://www.website.com"
}
[1640642658.136][INFO]: Waiting for pending navigations...
[1640642658.137][INFO]: Done waiting for pending navigations. Status: ok
[1640642658.417][INFO]: Waiting for pending navigations...
[1640642659.122][INFO]: Done waiting for pending navigations. Status: ok
[1640642659.122][INFO]: [d95aa29866064789c167e42c4911ed36] RESPONSE Navigate
[1640642659.127][INFO]: [d95aa29866064789c167e42c4911ed36] COMMAND DeleteAllCookies {
}
[1640642659.127][INFO]: Waiting for pending navigations...
[1640642659.128][INFO]: Done waiting for pending navigations. Status: ok
[…]

失败实例(实例#18(:

[…]
[1640642194.176][INFO]: [9148f58db0e76ea70186f0739b04e677] RESPONSE SetTimeouts
[1640642194.176][INFO]: [9148f58db0e76ea70186f0739b04e677] COMMAND Navigate {
"url": "https://www.website.com"
}
[1640642194.176][INFO]: Waiting for pending navigations...
[1640642194.178][INFO]: Done waiting for pending navigations. Status: ok
x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00
[1640642194.122][INFO]: [330dd18a9973da505814eddae0cfd97d] COMMAND QuitAll {
}
[1640642194.172][INFO]: [330dd18a9973da505814eddae0cfd97d] RESPONSE QuitAll
  • 问题与多线程无关,因为在使用并行进程之前,我会按顺序启动实例
  • 这台机器有更多的资源,所以它不是关于限制CPU或内存
  • 在另一台机器上,我可以运行30个实例问题

我试着调试它,但不明白为什么会发生这种情况。如何检索有关此实例失败/退出原因的更多信息?

如果您要在Python测试中使用多线程,您可以考虑使用"pytest xdist";为您处理多个流程:https://github.com/pytest-dev/pytest-xdist.如果您将Selenium与Python和pytest一起使用,那么有一个框架可以为您简化Selenium测试多线程,";SeleniumBase":https://github.com/seleniumbase/SeleniumBase.它的功能是作为pytest插件,因此您可以使用pytest xdist提供的pytest多线程参数,并根据需要多线程运行所有Selenium Python测试。例如:pytest -n 20用于20个并行线程,假设您的机器有足够的内存。如果你的机器没有足够的内存,那么一定要使用更少的线程。打开许多浏览器窗口可能会占用大量内存。

相关内容

最新更新