Python-爬蟲基礎(chǔ)-Selenium-Xpath-PhantomJS等介紹了解(轉(zhuǎn)載記錄)

再見

最近幾天沒有寫教程,但是一直在翻資料。

在昨天,我翻到了一條消息:PhantomJS宣布暫停開發(fā)。

最初我是在今日頭條上看到的,原標題是“PhantomJS宣布終止開發(fā)”。不過,寫這篇文章的時候我看了一下,應該是“暫?!保╯uspending)……萬惡的標題黨……

北京時間2018年3月4日1:16(時間上面就這么寫吧……GitHub也沒有標當?shù)貢r間……),PhantomJS的作者ariya在PhantomJS的GitHub頁面的issue #15344中寫道:

由于缺乏積極的貢獻,我將會存檔該項目。
如果將來我們又重新開發(fā)這個項目的話,這個項目還會被取出來。
因此,所有的之前的關(guān)于PhantomJS 2.5(由 @Vitallium 提起)和PhantomJS 2.1.x(由 @pixiuPL 提起)的計劃也會廢棄。接下來,為了防止混淆,上述被廢棄的版本的源碼和二進制包也會被刪除。在未來的通知之前,PhantomJS 2.1.1將會是已知最后的穩(wěn)定版本。

image

作者ariya宣布暫停開發(fā)PhantomJS

不過從開源中國發(fā)的文章來看,這背后是開發(fā)者內(nèi)部的矛盾。之前核心開發(fā)者之一 Vitaly Slobodin 宣布退出,當時就有人對這個項目感到擔憂。然后另一位核心開發(fā)者 pixiuPL 發(fā)布公開信表示,自己已被迫辭任合作者。這應該就是ariya宣布暫停開發(fā)的導火索吧。

PixiuPL 說自己在去年 11 月被 ariya 邀請成為 PhantomJS 項目在 Github 上的 Collaborator,隨后開始深入研究 PJS 的源碼,并進行 PR 合并、Issues 處理 、新版本發(fā)布等工作。近日,由于他在開發(fā)過程中遇到了需要訪問項目設(shè)置權(quán)限的問題,隨后在 Skype 和郵件上多次聯(lián)系 ariya ,但均未得到回復(即使對方在線)。
在公開信發(fā)布后的 3 月 4 日,pixiuPL 補充道,ariya 已通過 Skype 回復了他,但對于他接管項目的建議感到不愉快。ariya 似乎更愿意關(guān)閉項目,并批評 pixiuPL 創(chuàng)建了 PJS 的內(nèi)部分支(在 GitHub 之外)。

大牛之間的矛盾我也就不多加評論了,畢竟也不是非常清楚情況。不過PhantomJS這款工具在Python爬蟲中可是非常有名的。它是一個無頭(Headless,無界面,使用腳本進行操作)瀏覽器,可以進行模擬登錄等操作,以便爬取需要登錄的網(wǎng)站。我當時做QQ空間的爬蟲的時候就接觸到了它。想想還是比較惋惜的。

暫停開發(fā)的話,可以用別的工具啊。在開源中國的報道下面的評論中,我也知道谷歌的Chrome就有無頭模式。

于是我就想在閑的時候?qū)懸幌玛P(guān)于爬蟲瀏覽器轉(zhuǎn)變的文章。不過,今天我看到的一條消息,比之前看到的還要震驚。

今天本地調(diào)試基于Selenium+PhantomJS的動態(tài)爬蟲程序順利結(jié)束后,著手部署到服務器上,剛買的熱乎的京東云,噼里啪啦一頓安裝環(huán)境,最后跑的時候報了這么個錯誤:
UserWarning: Selenium support for PhantomJS has been deprecated, please use headless versions of Chrome or Firefox instead運用我考了五遍才飄過的六級英語定睛一看,這個意思是說,新版本的Selenium不再支持PhantomJS了,請使用Chrome或Firefox的無頭版本來替代。腦瓜里瞬間響起了這首歌的旋律,簡直不能接受,憑什么就把我們PhantomJS拋棄了(╯‵□′)╯︵┻━┻。

image

CSDN上的“孔天逸”關(guān)于新版本的Selenium不再支持PhantomJS的文章

看來是我火星了……原來Selenium早就準備不支持PhantomJS了。不過作者也說了,可能是因為Firefox和Chrome都帶了無頭模式,導致PhantomJS的優(yōu)勢瞬間消失了……

這么一說,PhantomJS其實挺慘的……內(nèi)有內(nèi)斗,外有打壓,搞得眾叛親離(滑稽)。

替代

CSDN上的孔天逸從Mozilla上提供了Selenium+Headless Firefox在Python上實現(xiàn)的方法:

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') # 無頭參數(shù)
driver = Firefox(executable_path='geckodriver', firefox_options=options) # 配了環(huán)境變量第一個參數(shù)就可以省了,不然傳絕對路徑
wait = WebDriverWait(driver, timeout=10)
driver.get('http://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()

作者也說了,本地要有Firefox;本地要有g(shù)eckodriver,最好再配置一下環(huán)境變量;別每下載一個網(wǎng)頁實例化一個webdriver(Firefox or Chrome)然后就close()掉,實例化webdriver的時間也是時間~推薦將下載器做成單例類或?qū)ebdirver做類變量。

對于Chrome,博客園上的zhuxiaoxi提供了解決方案(需要安裝chromedriver):

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("https://cnblogs.com/")

大家可以按需使用。

結(jié)語

我寫這篇文章的目的就是想說一下,該換瀏覽器了。

目前許多關(guān)于Python爬蟲的教程都還是使用PhantomJS進行講解的,現(xiàn)在PhantomJS已死,有事請用Chrome或者是Firefox。

image

目前許多關(guān)于Python爬蟲的教程都還是使用PhantomJS進行講解的

(我寫這篇文章的時候,居然看到一個14小時前在某個頭條號發(fā)的關(guān)于PhantomJS的教程……不知道該說什么好……)

參考資料

  • Archiving the project: suspending the development · Issue #15344 · ariya/phantomjs
  • 因內(nèi)部鬧矛盾,PhantomJS 宣布封存歸檔暫停開發(fā) - 開源中國社區(qū)
  • 震驚!Selenium分手PhantomJS - CSDN博客
  • PhantomJS在Selenium中被標記為過時的應對措施 - zhuxiaoxi - 博客園

來自 用Python做爬蟲的各位,不要再用PhantomJS了

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容