07月10, 2018

Python中使用Selenium和Headless Chrome

最近在使用Selenium+PhantomJS动态抓取网页时,发现了Selenium已经放弃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了,建议使用火狐或者谷歌无界面浏览器。 本文主要总结一下Python如何使用Headless Chrome,用法可以参考官方说明:Getting Started with Headless Chrome

注意事项: Headless mode has been available on Mac and Linux since Chrome 59. Windows support came in Chrome 60. 所以在使用的时候,请注意版本号。

前提条件:

  • 本地安装Chrome浏览器
  • 本地需要chromedriver驱动器文件,如果不配置环境变量的话,需要手动指定executable_path参数。

1、安装Chrome浏览器

Windows、MacOS上的安装这里就不多说了,主要说一下Linux下的安装,可以参考文章INSTALLING GOOGLE CHROME ON CENTOS, AMAZON LINUX, OR RHEL

注意事项: 如果在安装过程中,提示如下错误:

http://dl.google.com/linux/chrome/rpm/stable/x86_64/repodata/repomd.xml: [Errno 14]

解决办法是修改文件/etc/yum.repos.d/google-chrome.repo为如下内容:

[google-chrome]
name=google-chrome
baseurl=https://dl.google.com/linux/chrome/rpm/stable/$basearch
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub
sslverify=0

重新执行安装命令即可(与官方提供的repo的区别是使用https并且设置sslverify为0,直接使用http会出现Errorno 14)

安装路径说明:

  • Chrome安装路径:/opt/google/chrome/
  • Chrome自动创建的软链路径:/usr/bin/google-chrome-stable

2、下载chromedriver驱动器

下载地址:ChromeDriver - WebDriver for Chrome

保存路径及使用说明:

  • 保存至环境变量PATH目录下,用法:driver = webdriver.Chrome(chrome_options=chrome_options)
  • 未保存至环境变量PATH目录下,用法:driver = webdriver.Chrome(executable_path='chromedriver path', chrome_options=chrome_options)

3、使用Headless Chrome

#!/usr/bin/env python
# -*- coding:utf-8 -*-

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

chrome_options = Options()
chrome_options.add_argument('--headless')
# --disable-gpu only on Windows
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument("window-size=1024,768")
chrome_options.add_argument("--no-sandbox")
driver = webdriver.Chrome(chrome_options=chrome_options)

4、常见错误及解决方案

  • ①、exited abnormally

错误提示: selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally

解决方案:chrome_options.add_argument("--no-sandbox")

  • ②、no such frame

错误提示:selenium.common.exceptions.NoSuchFrameException: Message: no such frame

解决方案:chrome_options.add_argument("window-size=1024,768")

  • ③、cannot find Chrome binary

这个错误是指没有找到Chrome本地浏览器,常见于Linux环境下

解决方案:ln -s /opt/google/chrome/google-chrome /usr/bin/google-chrome

以上就是Python中使用SeleniumHeadless Chrome的方法,其它具体用法与PhantomJS基本相同,可参考官方用法,有任何问题,可在文章下方留言。

本文链接:https://www.shaobin.wang/post/33.html

Comments