在 Python 中,如何检查 Selenium WebDriver 是不是已退出?
Posted
技术标签:
【中文标题】在 Python 中,如何检查 Selenium WebDriver 是不是已退出?【英文标题】:In Python, how to check if Selenium WebDriver has quit or not?在 Python 中,如何检查 Selenium WebDriver 是否已退出? 【发布时间】:2018-03-19 01:59:31 【问题描述】:以下是示例代码:
from selenium import webdriver
driver = webdriver.Firefox()
(这里由于某种原因关闭了窗口)
driver.quit()
Traceback(最近一次调用最后一次):文件“”,第 1 行,in 文件 “/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/webdriver.py”, 第 183 行,退出 RemoteWebDriver.quit(self) 文件“/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py”, 第 592 行,退出 self.execute(Command.QUIT)文件“/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py”, 第 297 行,执行中 self.error_handler.check_response(response) 文件 "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/errorhandler.py", 第 194 行,在 check_response 中 raise exception_class(message, screen, stacktrace) selenium.common.exceptions.WebDriverException: Message: 试图运行 命令而不建立连接
有什么方法可以检查 webdriver 的实例是否处于活动状态?
【问题讨论】:
【参考方案1】:你可以使用类似这样的东西,它使用 psutil
from selenium import webdriver
import psutil
driver = webdriver.Firefox()
driver.get("http://tarunlalwani.com")
driver_process = psutil.Process(driver.service.process.pid)
if driver_process.is_running():
print ("driver is running")
firefox_process = driver_process.children()
if firefox_process:
firefox_process = firefox_process[0]
if firefox_process.is_running():
print("Firefox is still running, we can quit")
driver.quit()
else:
print("Firefox is dead, can't quit. Let's kill the driver")
firefox_process.kill()
else:
print("driver has died")
【讨论】:
这是一个很好的答案,除了在服务已经死掉(无论出于何种原因)并且它留下一个孤立的浏览器运行的情况下它无法关闭浏览器。 @CoreyGoldberg,你的意思是壁虎驱动本身死了吗?这仅在您在创建驱动程序后立即捕获 PID 时才有效,并且如果您无法捕获相同的内容,则无论如何都不必杀死它。唯一的其他选择是杀死所有firefox.exe
,这可能不是杀死的好方法【参考方案2】:
是 Pythonic... 如果异常失败,请尝试退出并捕获异常。
try:
driver.quit()
except WebDriverException:
pass
【讨论】:
【参考方案3】:这是我发现并喜欢的:
def setup(self):
self.wd = webdriver.Firefox()
def teardown(self):
# self.wd.service.process == None if quit already.
if self.wd.service.process != None:
self.wd.quit()
注意:如果驱动程序已经退出,driver_process=psutil.Process(driver.service.process.pid) 将抛出异常。
【讨论】:
以上是关于在 Python 中,如何检查 Selenium WebDriver 是不是已退出?的主要内容,如果未能解决你的问题,请参考以下文章
Python + Selenium - 如何检查使用 CSS 设置样式并显示为内容的图像?
如何检查 Selenium Python 中是不是选中/取消选中复选框? [复制]
使用 Selenium 和 Python,如何检查按钮是不是仍然可点击?
如何在 python 中正确关闭 Selenium WebDriver 实例?