WebDriverException: Message: unknown error: Chrome failed to start: crashed
第一種:如果出現下面情況:
- chrome瀏覽器有,並且版本也和chromedriver的契合
- 最近卸載過chrome瀏覽器,並且重新裝過了
- 無論怎么看,都是正常的
如果有以上情況可能存在版本沖突,兩個版本的chrome(我之前就出現過),或者版本不對應,一直出現 Chrome failed to start: crashed
解決方案
刪除:c:\Users(自己的用戶名)\AppData\Local\Google\Chrome\
有界面形式:
import time
from selenium import webdriver path=r'D:\Anaconda_home\Anaconda3\envs\tensorflow_gpu\Scripts\chromedriver.exe' browser = webdriver.Chrome(executable_path=path)#說明chromedriver.exe的地址 browser.set_window_size(1920, 1080) browser.get('https://www.baidu.com/') browser.get('https://www.taobao.com/') browser.get('https://www.python.org/') browser.back() time.sleep(1) browser.forward() browser.close()
第二種:采用以下:
1. 背景
在使用selenium + chrome瀏覽器渲染模式爬取數據時,如果並發任務過多,或者爬蟲的運行時間很長,那么很容易出現瀏覽器崩潰的現象,如下:
這一般是資源消耗過大造成的(據說chrome瀏覽器有內存泄漏的情況)。那如何解決這個問題呢?
這種情況下,我們首先就會想到使用無界面的瀏覽器PhantomJS,但是PhantomJS現在年久失修,后繼無人,對很多新的特性支持並不夠好。不過好在Google今年在chrome中增加了一項新的特性: Headless mode ,這樣我們就可以使用無界面的chrome來爬取數據了,占用資源更少,速度更快。而且可喜的是,google的團隊承諾會一直維護它…
2. 環境
系統:win10
python 3.6.5
IDE:jupyter notebook
安裝過chrome瀏覽器( 75.0.3770.100(正式版本) 64 位)
selenium 3.7.0
配置好ChromeDriver v2.46
注意:
因為Headless mode 是新推出的特性,只有高級的版本才能使用,並不向前兼容,所以對chrome瀏覽器和chromedriver的版本有要求:
1. 對chrome瀏覽器來說:
linux,unix系統需要 chrome瀏覽器 >= 59
Windows系統需要 chrome瀏覽器 >= 60
2. chromeDriver版本與chrome瀏覽器匹配:
這個部分參考文章:https://www.cnblogs.com/gaofighting/p/10757013.html;最新下載:http://npm.taobao.org/mirrors/chromedriver/
無界面后台靜默運行代碼:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.keys import Keys chrome_options = webdriver.ChromeOptions() # 使用headless無界面瀏覽器模式 chrome_options.add_argument('--headless') chrome_options.add_argument('--disable-gpu') # 啟動瀏覽器,獲取網頁源代碼 browser = webdriver.Chrome(options=chrome_options) mainUrl = "https://www.taobao.com/" browser.get(mainUrl) print(f"browser text = {browser.page_source}")
browser.get_screenshot_as_file("test.png")#獲取截圖 browser.quit()