硒留下正在运行的进程吗?

战争基金

当我的Selenium程序由于某些错误而崩溃时,它似乎留着正在运行的进程。

例如,这是我的流程列表:

carol    30186  0.0  0.0 103576  7196 pts/11   Sl   00:45   0:00 /home/carol/test/chromedriver --port=51789
carol    30322  0.0  0.0 102552  7160 pts/11   Sl   00:45   0:00 /home/carol/test/chromedriver --port=33409
carol    30543  0.0  0.0 102552  7104 pts/11   Sl   00:48   0:00 /home/carol/test/chromedriver --port=42567
carol    30698  0.0  0.0 102552  7236 pts/11   Sl   00:50   0:00 /home/carol/test/chromedriver --port=46590
carol    30938  0.0  0.0 102552  7496 pts/11   Sl   00:55   0:00 /home/carol/test/chromedriver --port=51930
carol    31546  0.0  0.0 102552  7376 pts/11   Sl   01:16   0:00 /home/carol/test/chromedriver --port=53077
carol    31549  0.5  0.0      0     0 pts/11   Z    01:16   0:03 [chrome] <defunct>
carol    31738  0.0  0.0 102552  7388 pts/11   Sl   01:17   0:00 /home/carol/test/chromedriver --port=55414
carol    31741  0.3  0.0      0     0 pts/11   Z    01:17   0:02 [chrome] <defunct>
carol    31903  0.0  0.0 102552  7368 pts/11   Sl   01:19   0:00 /home/carol/test/chromedriver --port=54205
carol    31906  0.6  0.0      0     0 pts/11   Z    01:19   0:03 [chrome] <defunct>
carol    32083  0.0  0.0 102552  7292 pts/11   Sl   01:20   0:00 /home/carol/test/chromedriver --port=39083
carol    32440  0.0  0.0 102552  7412 pts/11   Sl   01:24   0:00 /home/carol/test/chromedriver --port=34326
carol    32443  1.7  0.0      0     0 pts/11   Z    01:24   0:03 [chrome] <defunct>
carol    32691  0.1  0.0 102552  7360 pts/11   Sl   01:26   0:00 /home/carol/test/chromedriver --port=36369
carol    32695  2.8  0.0      0     0 pts/11   Z    01:26   0:02 [chrome] <defunct>

这是我的代码:

from selenium import webdriver

browser = webdriver.Chrome("path/to/chromedriver")
browser.get("http://stackoverflow.com")
browser.find_element_by_id('...').click()

browser.close()

有时,浏览器无法足够快地加载网页元素,因此Selenium在尝试单击未找到的内容时会崩溃。其他时候它工作正常。

为了简单起见,这是一个简单的示例,但是对于更复杂的Selenium程序,退出和不退出正在运行的进程的保证的干净方法是什么?它应该在意外崩溃和成功运行时干净地退出。

列维·诺克(Levi Noecker)

发生的事情是您的代码引发了异常,导致python进程无法继续进行。这样,就不会在浏览器对象上调用close / quit方法,因此chromedrivers无限期地闲逛。

您需要使用try / except块来确保每次都调用close方法,即使抛出异常也是如此。一个非常简单的示例是:

from selenium import webdriver

browser = webdriver.Chrome("path/to/chromedriver")
try:
    browser.get("http://stackoverflow.com")
    browser.find_element_by_id('...').click()

except:
    browser.close()
    browser.quit()  # I exclusively use quit

您可以在此处采用许多更为复杂的方法,例如创建一个与该with语句一起使用的上下文管理器,但是如果不更好地了解您的代码库,很难推荐一种方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么即使关闭浏览器,Google Chrome也会留下正在运行的进程?

来自分类Dev

锁定会影响正在运行的进程吗?

来自分类Dev

取消正在运行的进程

来自分类Dev

筛选正在运行的进程

来自分类Dev

如何调试正在运行的Perl进程?

来自分类Dev

如何终止正在运行的iPython进程

来自分类Dev

获取正在运行的进程列表

来自分类Dev

机器挂起时正在运行的进程

来自分类Dev

Python与正在运行的进程进行交互

来自分类Dev

如何隐藏正在运行的进程?

来自分类Dev

检查子进程是否正在运行

来自分类Dev

监视/监视正在运行的rsync进程

来自分类Dev

检查给定进程是否正在运行

来自分类Dev

如何控制正在运行的进程数?

来自分类Dev

正在运行的Python进程过多

来自分类Dev

持续检查进程是否正在运行

来自分类Dev

线程循环,直到进程正在运行

来自分类Dev

机器挂起时正在运行的进程

来自分类Dev

监视/监视正在运行的rsync进程

来自分类Dev

如何查看正在运行的进程?

来自分类Dev

更改正在运行的进程的环境

来自分类Dev

从正在运行的进程创建VBScript对象?

来自分类Dev

如何终止正在运行的iPython进程

来自分类Dev

列出不带procfs的正在运行的进程

来自分类Dev

更改正在运行的进程的EUID

来自分类Dev

检查进程是否正在运行-Windows

来自分类Dev

正在运行的进程数显示在顶部

来自分类Dev

正在运行的Python进程过多

来自分类Dev

与正在运行的php进程进行交互