Selenium 以后将不再支持 PhantomJS 。而 Headless Chrome 越来越被人们接受,俨然有成为事实标准之势。 在 CentOS 7 上部署 Headless Chrome + Selenium 好像比在桌面系统上麻烦一些。是以为记录。
安装 Chrome
$ vi /etc/yum.repos.d/google-chrome.repo
写入如下内容并保存:
[google-chrome]
name=google-chrome
baseurl=http://dl.google.com/linux/chrome/rpm/stable/$basearch
enabled=1
gpgcheck=1
gpgkey=https://dl.google.com/linux/linux_signing_key.pub
然后
$ sudo yum install google-chrome-stable
安装 chromedriver
在这个页面 下载与 Chrome 版本对应的 chromedriver , 解压后把 chromedriver 文件拷贝到 /opt/google/chrome/ 下(或其他你喜欢的路径)。 并确保其在 PATH 中可以找到,比如建个符号链接:
$ sudo ln -s /opt/google/chrome/chromedriver /usr/bin/
安装 Xvfb(不再需要了)
$ sudo yum install Xvfb
安装字体库
$ sudo yum install libXfont xorg-x11-fonts*
如果缺少这一步,运行最后的示例代码时会出现如下错误:
selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: crashed
安装 selenium
如果你使用了虚拟环境,则先进入虚拟环境:
$ source /path/to/python/venv/activate
如果未使用虚拟环境,则上步可省。
然后,安装 selenium:
$ pip install selenium
安装 pyvirtualdisplay(不再需要了)
$ pip install pyvirtualdisplay
测试一下
附件中是测试代码,可按如下命令运行。该段代码会输出网页的标题。
$ ./headless.py http://www.example.com
附1: 测试代码
:
#!/usr/bin/env python3
#-*- coding: utf-8 -*-
import sys
from selenium import webdriver
def get_title(url):
chrome_options = webdriver.ChromeOptions()
chrome_options.set_headless(True)
browser = webdriver.Chrome(chrome_options=chrome_options)
browser.get(url)
print(browser.title)
browser.quit()
def main(argv):
n = int(argv[2]) if len(argv) > 2 else 1
for i in range(n):
get_title(argv[1])
if __name__ == '__main__':
try:
main(sys.argv)
except KeyboardInterrupt:
print ("Crtl+C Pressed. Shutting down.")
# vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4
附2: 旧版示例代码
:
#!/usr/bin/env python3
#-*- coding: utf-8 -*-
import sys
import platform
from selenium import webdriver
def get_title(url):
chrome_options = webdriver.ChromeOptions()
chrome_options.set_headless(True)