我将 Selenium 独立服务器用于远程 Web 驱动程序。我想弄清楚的一件事是如何有效地启动/停止它。在他们的文档中,它说
“调用方应该正确终止每个会话,调用 Selenium#stop()
或 WebDriver#quit
。”
我想做的是弄清楚如何以编程方式关闭服务器,但这是否有必要?换句话说,是否可以让服务器始终启动并运行,但在每次使用后关闭 session 并使用诸如 driver.quit()
之类的东西?因此,当我不使用它时,服务器会启动,但不会有会话。
答案 0 :(得分:1)
使用 Selenium standalone server 作为远程 WebDriver 时,您需要在最后调用 quit()
方法以正确终止每个会话。
根据最佳做法,您应该在 quit()
中调用 tearDown() {}
方法。通过发送带有 {"flags":["eForceQuit"]} 的 "quit" 命令调用 quit()
DELETEs 当前浏览会话> 最后在 /shutdown EndPoint 上发送 GET 请求。下面是一个例子:
1503397488598 webdriver::server DEBUG -> DELETE /session/8e457516-3335-4d3b-9140-53fb52aa8b74
1503397488607 geckodriver::marionette TRACE -> 37:[0,4,"quit",{"flags":["eForceQuit"]}]
1503397488821 webdriver::server DEBUG -> GET /shutdown
因此在调用 quit()
方法时,Web Browser
会话和 WebDriver 实例被完全杀死。
您可以在以下位置找到一些相关的详细讨论:
答案 1 :(得分:0)
你说得对。使用 seleniums driver.quit()
,因为它会正确关闭所有浏览器窗口并结束驱动程序的会话/进程。尤其是后者是您想要的,因为您肯定会无头运行脚本。
我有一个 selenium 脚本作为 Raspberry Pi(每小时 cron 作业)无头运行。该脚本在每次迭代结束时调用 driver.quit()
。当我执行 -ps A
(列出 unix 下的所有活动进程)时,不再显示活动的 selenium/python 进程。
希望能满足您的问题!