• selenium chromedriver退出报错


    记录使用python调用chromedriver时遇到的问题

    代码:

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    # author : fy
    # version : V1.0
    # file: chrome_test.py
    # time:2018/10/30 10:19
    
    from selenium import webdriver
    import platform
    
    
    class CT(object):
        def __init__(self):
            options = webdriver.ChromeOptions()
            options.add_argument('--headless')
            options.add_argument('--disable-gpu')
            options.add_argument("--no-sandbox")
            options.add_argument("--lang=" + "zh-CN")
            options.add_argument(
                '--user-agent=Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36')
            pf = platform.system()
            if pf == 'Windows':
                chromedriver = "E:\ChromeDownload\chromedriver_win32\chromedriver.exe"
            else:
                chromedriver = "/usr/bin/chromedriver"
    
            self.obj = webdriver.Chrome(chrome_options=options, executable_path=chromedriver)
        def __del__(self):
            self.obj.quit()
            pass
    
        def openpage(self):
            self.obj.get('http://www.baidu.com')
            print self.obj.page_source
            #self.obj.close()
    if __name__=='__main__':
        cct = CT()
        cct.openpage()
        

    其中:
    self.obj.close() ---关闭浏览器当前打开的页面,chromedriver进程不会退出
    self.obj.quit()     ---浏览器进程退出,任务管理器中可以看到chromedriver进程被释放

    如果直接这样运行会出现报错:

    Exception RuntimeError: RuntimeError('sys.meta_path must be a list of import hooks',) in <bound method CT.__del__ of <__main__.CT object at 0x040F61F0>> ignored

    解决方法1:
    把__del__中的self.obj.quit()放到实现函数里面
        def openpage(self):
            self.obj.get('http://www.baidu.com')
            print self.obj.page_source
            self.obj.quit()

    但是如果实现函数中有很多分支,每个分支中如果出现异常,都要调用quit很麻烦

    解决方法2:

    保留__del__中的self.obj.quit(),在外面手动释放类实例del cct

    if __name__=='__main__':           
        cct = CT()                     
        cct.openpage()                 
        del cct                        

    至于原因,在网上查了半天也没找到合适的解释。。。

  • 相关阅读:
    Tarjan求图的连通性总结
    hdu3849 Tarjan求无向图的割边+map
    两种代码风格解决强连通分量解决加多少条边使整个图连通&多少个点可以到达所有点
    hdu 离线处理+并查集
    hdu 1325判断是不是树
    poj3041 最小点覆盖即最大匹配(匈牙利算法)(模板)
    poj 2186 tarjan求强连通分量(模板题)
    poj2135 最小费用最大流模板
    SPFA队列模板
    链表专项刷题
  • 原文地址:https://www.cnblogs.com/taurusfy/p/9877201.html
Copyright © 2020-2023  润新知