記錄使用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
至於原因,在網上查了半天也沒找到合適的解釋。。。