今天本地調試基於Selenium+PhantomJS的動態爬蟲程序順利結束後,着手部署到服務器上,剛買的熱乎的京東雲,噼裏啪啦一頓安裝環境,最後跑的時候報了這麼個錯誤:css
UserWarning: Selenium support for PhantomJS has been deprecated, please use headless versions of Chrome or Firefox instead
運用我考了五遍才飄過的六級英語定睛一看,這個意思是說,新版本的Selenium再也不支持PhantomJS了,請使用Chrome或Firefox的無頭版原本替代。腦瓜裏瞬間響起了這首歌的旋律,簡直不能接受,憑什麼就把咱們PhantomJS拋棄了(╯‵□′)╯︵┻━┻。java
由於這半年都沒有寫爬蟲的需求,而且最近一直在本地用的老版本Selenium開發,因此一直還PhantomJS的很嗨,卻不知腳步已經落後了。查了一下,大概是去年七八月份Chrome和Firefox相繼推出了無頭瀏覽器模式。可能就由於這樣,PhantomJS獨領風騷的局面瞬間喪失,而後逐漸消失在歷史的塵埃中吧……小廠出的創新產品,大廠作出相似產品以後,小廠GG,大概也是這麼一回事吧……python
雖然很不情願,可是人不能老是追憶過去的美好,該往前走的時候就要往前走對吧~web
其實Selenium+Headless Firefox沒什麼好說的,跟Selenium+Friefox的區別就是實例化的時候傳個參數而已。chrome
須要注意的點就是:ubuntu
本地要有Firefox,否則報找不到載體 本地要有geckodriver,最好再配置一下環境變量 沒了瀏覽器
各個語言的示例代碼均可以在這個連接裏找到,這裏就搬運一下python的示例代碼吧:服務器
from selenium.webdriver import Firefox from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.firefox.options import Options from selenium.webdriver.support import expected_conditions as expected from selenium.webdriver.support.wait import WebDriverWait if __name__ == "__main__": options = Options() options.add_argument('-headless') # 無頭參數 driver = Firefox(executable_path='geckodriver', firefox_options=options) # 配了環境變量第一個參數就能夠省了,否則傳絕對路徑 wait = WebDriverWait(driver, timeout=10) driver.get('https://www.google.com') wait.until(expected.visibility_of_element_located((By.NAME, 'q'))).send_keys('headless firefox' + Keys.ENTER) wait.until(expected.visibility_of_element_located((By.CSS_SELECTOR, '#ires a'))).click() print(driver.page_source) driver.quit()
win10和ubuntu下我都測試了沒問題,從前實例化一個PhantomJS大約3秒,Headless Firefox的話,7秒左右……其實無傷大雅。less
這裏友情提示一下新手小夥伴,別每下載一個網頁實例化一個webdriver(Firefox or Chrome)而後就close()掉,實例化webdriver的時間也是時間~推薦將下載器作成單例類或將webdirver作類變量。測試
這個跟上邊大同小異,我沒試,傳送門:
PhantomJS在Selenium中被標記爲過期的應對措施 Getting Started with Headless Chrome