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 Firefox
和Selenium+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 Chrome
和Selenium+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