V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
18870715400
V2EX  ›  Python

想请问一下 selenium 中会不会遇到有时会不会自动关闭浏览器的情况

  •  
  •   18870715400 · 2020-09-13 13:36:18 +08:00 · 2141 次点击
    这是一个创建于 1536 天前的主题,其中的信息可能已经有所发展或是发生改变。

    代码如下

    from selenium import webdriver
    
    driver = webdriver.Chrome()
    
    driver.get("url")
    driver.find_element_by_xpath("xxx")
    ...
    ...
    ...
    driver.quit()
    
    

    中间的省略的就是执行的相关功能,在执行任务的结果中发现有的执行完成了之后不会自动关闭浏览器,所有的步骤都是正常执行,但是浏览器就是没有关闭, 导致堆积的浏览器越来越多, 机器越来越卡.然后重新调了同一个任务,发现正常执行,最后也会正常关闭, 但是为什么前面的同一个任务为什么不会自动关闭呢?这种情况偶尔出现.我排查了自己的代码, 没有发现相关的 bug, 这是 selenium 包自带的 bug 么?

    第 1 条附言  ·  2020-09-13 22:44:39 +08:00

    大概的业务代码是这样的

    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
    

    浏览器最后无论如何都会被设置成关闭,但是有的时候就是执行完了所有的步骤之后就是不会自动关闭, 页面一直挂在某一个页面, 然后重新调度该任务,又会自动的完成并且关闭

    第 2 条附言  ·  2020-09-15 22:56:51 +08:00
    更换新版本驱动和浏览器已经不会出现关不掉浏览器的问题
    9 条回复    2020-09-13 22:28:57 +08:00
    qazwsxkevin
        1
    qazwsxkevin  
       2020-09-13 13:57:37 +08:00
    driver.close ()
    然后再 driver.quit()试试看?
    会不会是 webdriver.exe 的版本匹配问题?
    jeeyong
        2
    jeeyong  
       2020-09-13 14:59:29 +08:00
    1.chromedriver 和 chrome 版本匹配的问题.
    2.内部逻辑出现错误, 异常报错, 未关闭(你的描述可能排除此项)
    3.引用的某个库异常, 但是未抛出, 你捕获不到. 但是依旧是错了. 所以卡在那.
    常见就这三种.
    lusi1990
        3
    lusi1990  
       2020-09-13 15:07:58 +08:00 via Android
    加个 try catch ,看下异常。不会无缘无故退出
    wutongshuxia
        4
    wutongshuxia  
       2020-09-13 15:12:47 +08:00
    selenium 确实会存在部分浏览器未关闭的情况,之前有个项目用到集群,然后慢慢机器内存就炸了,然后发现是浏览器未关闭。或者是浏览器到达了数量,无法再请求新浏览器导致连接不上的问题。这个暂时解决办法就是用脚本关闭一些运行比较久的浏览器
    chocotan
        5
    chocotan  
       2020-09-13 15:17:55 +08:00
    我用 java 也会遇到这样的情况,版本都是匹配的...
    我现在是定时 kill 进程
    18870715400
        6
    18870715400  
    OP
       2020-09-13 22:03:04 +08:00
    @qazwsxkevin 不会是匹配问题,
    @jeeyong 同一个任务重新再跑一次没有问题, 浏览器未关闭只是偶尔的情况, 日志里面没有相关错误的, 可就是没有关闭.
    jeeyong
        7
    jeeyong  
       2020-09-13 22:19:17 +08:00
    @18870715400 配置够吗?
    如果是 chromedriver 新版, 可以排除 chrome+chromedriver 的问题.
    我一个月十几万次的开关.没问题
    18870715400
        8
    18870715400  
    OP
       2020-09-13 22:26:08 +08:00
    @jeeyong 是 chrome 50 多的版本
    18870715400
        9
    18870715400  
    OP
       2020-09-13 22:28:57 +08:00
    @jeeyong 明天可以先试试使用新的版本的 chrome 和 chromedriver , 先跑跑看会不会再出现这种情况
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1768 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 16:36 · PVG 00:36 · LAX 08:36 · JFK 11:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.