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                        

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

猜你喜欢

转载自www.cnblogs.com/taurusfy/p/9877201.html