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


猜你喜欢

转载自blog.csdn.net/zhengqijun_/article/details/80235891