Selenium + PhantomJS使用報錯

Selenium + PhantomJS使用報錯

目錄


PhantomJS使用報錯

今天在調試使用Selenuim+PhantomJS動態抓取網頁時,出現了報錯,如下所示:

Python 2.7.12 (default, Dec  4 2017, 14:50:18) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from selenium import webdriver
>>> driver=webdriver.PhantomJS()
/usr/local/lib/python2.7/dist-packages/selenium/webdriver/phantomjs/webdriver.py:49: UserWarning: Selenium support for PhantomJS has been deprecated, please use headless versions of Chrome or Firefox instead
  warnings.warn('Selenium support for PhantomJS has been deprecated, please use headless '
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/phantomjs/webdriver.py", line 56, in __init__
    self.service.start()
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/common/service.py", line 83, in start
    os.path.basename(self.path), self.start_error_message)
selenium.common.exceptions.WebDriverException: Message: 'phantomjs' executable needs to be in PATH. 

PhantomJS報錯分析

UserWarning: Selenium support for PhantomJS has been deprecated, please use headless versions of Chrome or Firefox instead
  warnings.warn('Selenium support for PhantomJS has been deprecated, please use headless '

意思是說新版本的Selenium不再支持PhantomJS,請使用無頭版本的Chrome或Firefox代替。

PhantomJS報錯解決方案

1、Selenuim版本降級

卸載新版本的Selenuim,安裝指定舊版本的Selenuim。

sudo pip uninstall selenuim
pip install selenuim=2.48.0

再次運行,正常!

2、使用 headless versions of Chrome or Firefox

需要安裝Chrome瀏覽器 + ChromeDrivers驅動文件 或者 Firefox瀏覽器 + geckodriver驅動文件,二者選其一即可!
筆者在這裏使用的是Chrome + ChromeDrivers。
PhantomJS是Headless瀏覽器中相當知名的一款,被新版本的Selenium標記爲過時,代表着Selenium將會拋棄支持PhantomJS。所以推薦還是使用Headless Chrome/Firefox 比較好!

Chrome + ChromeDrivers配置

1、安裝Chrome瀏覽器

這裏就不詳細展開了,請自行百度。

2、配置ChromeDrivers

ChromeDrivers下載地址:http://npm.taobao.org/mirrors/chromedriver/
下載ChromeDrivers文件,放到/usr/bin目錄下(或者配置環境變量)。

查看Chrome版本號:

chrome --version

ChromeDrivers版本與Chrome版本的對應關係

ChromeDrivers版本 Chrome版本
v2.30 v58-60
v2.31 v58-60
v2.32 v59-61
v2.33 v60-62
v2.34 v61-63
v2.35 v62-64
v2.36 v63-65
v2.37 v64-66
v2.38 v65-67

以上是其中最新的版本對應關係。

使用無界面瀏覽器

Selenium+Headless Firefox

Selenium+Headless FirefoxSelenium+Firefox,區別就是實例option的時候設置-headless參數。

前提條件:

  • 本地安裝Firefox瀏覽器
  • 本地需要geckodriver驅動器文件,如果不配置環境變量的話,需要手動指定executable_path參數。
from selenium.webdriver import Firefox
from selenium.webdriver.firefox.options import Options

def main():
    options = Options()
    options.add_argument('-headless')
    driver = Firefox(executable_path='./geckodriver', firefox_options=options)
    driver.get("https://www.baidu.com/")
    print(driver.page_source)
    driver.close()

if __name__ == '__main__':
    main()

Selenium+Headless Chrome

Selenium+Headless ChromeSelenium+Chrome,區別就是實例option的時候設置-headless參數。

前提條件:

  • 本地安裝Chrome瀏覽器
  • 本地需要ChromeDriver驅動器文件,如果不配置環境變量的話,需要手動指定executable_path參數。
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

def main():
    chrome_options = Options()
    chrome_options.add_argument('--headless')
    chrome_options.add_argument('--disable-gpu')
    driver = webdriver.Chrome(executable_path='./chromedriver', chrome_options=chrome_options) # 配置了環境變量第一個參數就可以省,不然需要ChromeDriver絕對路徑
    driver.get("https://www.baidu.com")
    print(driver.page_source)
    driver.close()

if __name__ == '__main__':
    main()

其它

headless-chrome的其他資料請看:https://developers.google.com/web/updates/2017/04/headless-chrome


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章