无法启动超过 17 个 Selenium web驱动程序

Can't start more than 17 Selenium-webdrivers

提问人:endo.anaconda 提问时间:12/28/2021 最后编辑:jonrsharpeendo.anaconda 更新时间:12/28/2021 访问量:183

问:

我在 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
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
[1640642194.122][INFO]: [330dd18a9973da505814eddae0cfd97d] COMMAND QuitAll {

}
[1640642194.172][INFO]: [330dd18a9973da505814eddae0cfd97d] RESPONSE QuitAll
  • 问题与多线程无关,因为在使用并行进程之前,我按顺序启动实例。
  • 机器有更多的资源,所以它不是关于限制 CPU 或内存。
  • 在另一台机器上,我可以运行 30 个实例,而无需 问题。

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

python-3.x selenium selenium-webdriver chrome-web-driver

评论


答:

1赞 Michael Mintz 12/28/2021 #1

如果您打算使用多线程进行 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 测试。例如:对于 20 个并行线程,假设您的机器有足够的内存。如果您的机器没有足够的内存,那么一定要使用更少的线程。启动大量浏览器窗口可能会非常占用内存。pytest -n 20

评论

0赞 endo.anaconda 12/29/2021
谢谢,您的评论引导我走上了正确的道路,起初 SeleniumBase 看起来很有前途,但测试有很大的缺陷,它们无法动态分配任务。在主要工人环境中。我现在开始使用的是 SeleniumGrid。