记录使用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
至于原因,在网上查了半天也没找到合适的解释。。。