CentOS7 上部署 Headless Chrome + Selenium
On 2018-02-23 17:45:55 By SoliCentOS7 上部署 Headless Chrome + Selenium
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)
browser = webdriver.Chrome(chrome_options=chrome_options)
browser.get(url)
print(browser.title)
browser.quit()
def main(argv):
if platform.system() == "Linux":
from pyvirtualdisplay import Display
Display(visible=0, size=(1920, 1080)).start()
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
Except where otherwise noted, content on this site is licensed under a
Creative Commons Attribution 4.0 International license
.