再見

最近幾天沒有寫教程,但是一直在翻資料。NcD鹿先生侃娛樂

在昨天,我翻到了一條消息:PhantomJS宣布暫停開發(fā)。NcD鹿先生侃娛樂

最初我是在今日頭條上看到的,原標(biāo)題是“PhantomJS宣布終止開發(fā)”。不過,寫這篇文章的時(shí)候我看了一下,應(yīng)該是“暫?!保╯uspending)……萬惡的標(biāo)題黨……NcD鹿先生侃娛樂

北京時(shí)間2018年3月4日1:16(時(shí)間上面就這么寫吧……GitHub也沒有標(biāo)當(dāng)?shù)貢r(shí)間……),PhantomJS的作者ariya在PhantomJS的GitHub頁(yè)面的issue #15344中寫道:NcD鹿先生侃娛樂

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

NcD鹿先生侃娛樂

作者ariya宣布暫停開發(fā)PhantomJSNcD鹿先生侃娛樂

不過從開源中國(guó)發(fā)的文章來看,這背后是開發(fā)者內(nèi)部的矛盾。之前核心開發(fā)者之一 Vitaly Slobodin 宣布退出,當(dāng)時(shí)就有人對(duì)這個(gè)項(xiàng)目感到擔(dān)憂。然后另一位核心開發(fā)者 pixiuPL 發(fā)布公開信表示,自己已被迫辭任合作者。這應(yīng)該就是ariya宣布暫停開發(fā)的導(dǎo)火索吧。NcD鹿先生侃娛樂

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

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

暫停開發(fā)的話,可以用別的工具啊。在開源中國(guó)的報(bào)道下面的評(píng)論中,我也知道谷歌的Chrome就有無頭模式。NcD鹿先生侃娛樂

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

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

NcD鹿先生侃娛樂

CSDN上的“孔天逸”關(guān)于新版本的Selenium不再支持PhantomJS的文章NcD鹿先生侃娛樂

看來是我火星了……原來Selenium早就準(zhǔn)備不支持PhantomJS了。不過作者也說了,可能是因?yàn)镕irefox和Chrome都帶了無頭模式,導(dǎo)致PhantomJS的優(yōu)勢(shì)瞬間消失了……NcD鹿先生侃娛樂

這么一說,PhantomJS其實(shí)挺慘的……內(nèi)有內(nèi)斗,外有打壓,搞得眾叛親離(滑稽)。NcD鹿先生侃娛樂

替代

CSDN上的孔天逸從Mozilla上提供了Selenium+Headless Firefox在Python上實(shí)現(xiàn)的方法:NcD鹿先生侃娛樂

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)境變量第一個(gè)參數(shù)就可以省了,不然傳絕對(duì)路徑
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)境變量;別每下載一個(gè)網(wǎng)頁(yè)實(shí)例化一個(gè)webdriver(Firefox or Chrome)然后就close()掉,實(shí)例化webdriver的時(shí)間也是時(shí)間~推薦將下載器做成單例類或?qū)ebdirver做類變量。NcD鹿先生侃娛樂

對(duì)于Chrome,博客園上的zhuxiaoxi提供了解決方案(需要安裝chromedriver):NcD鹿先生侃娛樂

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/")

大家可以按需使用。NcD鹿先生侃娛樂

結(jié)語

我寫這篇文章的目的就是想說一下,該換瀏覽器了。NcD鹿先生侃娛樂

目前許多關(guān)于Python爬蟲的教程都還是使用PhantomJS進(jìn)行講解的,現(xiàn)在PhantomJS已死,有事請(qǐng)用Chrome或者是Firefox。NcD鹿先生侃娛樂

NcD鹿先生侃娛樂

目前許多關(guān)于Python爬蟲的教程都還是使用PhantomJS進(jìn)行講解的NcD鹿先生侃娛樂

(我寫這篇文章的時(shí)候,居然看到一個(gè)14小時(shí)前在某個(gè)頭條號(hào)發(fā)的關(guān)于PhantomJS的教程……不知道該說什么好……)NcD鹿先生侃娛樂

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

1.《用Python做爬蟲的各位,不要再用PhantomJS了》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識(shí),僅代表作者本人觀點(diǎn),與本網(wǎng)站無關(guān),侵刪請(qǐng)聯(lián)系頁(yè)腳下方聯(lián)系方式。

2.《用Python做爬蟲的各位,不要再用PhantomJS了》僅供讀者參考,本網(wǎng)站未對(duì)該內(nèi)容進(jìn)行證實(shí),對(duì)其原創(chuàng)性、真實(shí)性、完整性、及時(shí)性不作任何保證。

3.文章轉(zhuǎn)載時(shí)請(qǐng)保留本站內(nèi)容來源地址,http://f99ss.com/fangchan/19889.html