Selenium+Headless Firefox

背景

今天本地調試基於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

Selenium+Headless Firefox

雖然很不情願,可是人不能老是追憶過去的美好,該往前走的時候就要往前走對吧~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作類變量。測試

Selenium+Headless Chrome

這個跟上邊大同小異,我沒試,傳送門:

PhantomJS在Selenium中被標記爲過期的應對措施 Getting Started with Headless Chrome

相關文章
相關標籤/搜索