想请问一下 selenium 中会不会遇到有时会不会自动关闭浏览器的情况
代码如下
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("url")
driver.find_element_by_xpath("xxx")
...
...
...
driver.quit()
中间的省略的就是执行的相关功能,在执行任务的结果中发现有的执行完成了之后不会自动关闭浏览器,所有的步骤都是正常执行,但是浏览器就是没有关闭, 导致堆积的浏览器越来越多, 机器越来越卡.然后重新调了同一个任务,发现正常执行,最后也会正常关闭, 但是为什么前面的同一个任务为什么不会自动关闭呢?这种情况偶尔出现.我排查了自己的代码, 没有发现相关的 bug, 这是 selenium 包自带的 bug 么?
大概的业务代码是这样的
class Example:
def __init__(self):
self.driver = driver.Chrome()
def execute(self):
self.driver.get("url")
...
...
...
def __del__(self):
if self.driver:
self.driver.quit()
self.driver = None
try:
e = Example()
e.execute()
e = None
except:
if e:
e = None
finally:
e = None
浏览器最后无论如何都会被设置成关闭,但是有的时候就是执行完了所有的步骤之后就是不会自动关闭, 页面一直挂在某一个页面, 然后重新调度该任务,又会自动的完成并且关闭
更换新版本驱动和浏览器已经不会出现关不掉浏览器的问题 ----------------------- 以下是精选回复-----------------------
答:driver.close ()
然后再 driver.quit()试试看?
会不会是 webdriver.exe 的版本匹配问题?
答:1.chromedriver 和 chrome 版本匹配的问题.
2.内部逻辑出现错误, 异常报错, 未关闭(你的描述可能排除此项)
3.引用的某个库异常, 但是未抛出, 你捕获不到. 但是依旧是错了. 所以卡在那.
常见就这三种.
答:加个 try catch ,看下异常。不会无缘无故退出
答:selenium 确实会存在部分浏览器未关闭的情况,之前有个项目用到集群,然后慢慢机器内存就炸了,然后发现是浏览器未关闭。或者是浏览器到达了数量,无法再请求新浏览器导致连接不上的问题。这个暂时解决办法就是用脚本关闭一些运行比较久的浏览器
答:我用 java 也会遇到这样的情况,版本都是匹配的...
我现在是定时 kill 进程
0条评论