我正在尝试运行自动化的selenium headless测试,而我遇到了一些问题,其中测试因某些无法解释的原因而挂起。完整代码段位于pastebin,但代码的相关部分如下所示:
# stress testing
i = 0
while True:
print i
d = webdriver.Remote(
service.service_url,
desired_capabilities=DesiredCapabilities.CHROME
)
print i, "started driver"
d.get("http://www.facebook.com")
print i, "got fb"
d.quit()
print i, "quit"
i += 1
示例输出
0
0 started driver
0 got fb
0 quit
...
11 <hang>
表示webdriver.Remote
拒绝正确启动驱动程序。当使用webdriver.Chrome
直接构建驱动程序实例(而不是将ChromeDriver作为服务运行)时,也会发生这种情况。
将SIGINT发送到挂起的程序后,我得到一个stacktrace(pastebin),指示在构造函数的某处读取阻塞套接字。
ChromeDriver的日志(dropcanvas)似乎没有任何不妥之处,我对这里发生的事情感到非常困惑。
以前曾问过类似的问题,最相关的问题是Selenium Chromedriver Hangs?;但是,我无法重现已接受的解决方案(为webdriver...
的每个实例化重新启动Xvfb)。在这里,等效的是在Xvfb.start
之前调用d = webdriver.Remote...
并在循环结束时调用Xvfb.stop
;我试过这个没有成功。
非常感谢任何帮助。
编辑:如堆栈跟踪所示,webdriver.Remote
挂在某个套接字读取功能上;我跟踪了要求
POST 'http://127.0.0.1:<chromedriver_port>/session'
身体
'{"desiredCapabilities": {"platform": "ANY", "browserName": "chrome", "version": "", "javascriptEnabled": true}}'
因此Chromedriver似乎没有因某些原因做出回应。将继续调试。