CentOS + Selenium 用法小结

CentOS + Selenium 用法小结

使用场景

CentOS下使用Selenium,这里的CentOS是指无GUIServer版,其特殊性在于,没有可以供输出的显示界面,除了常见的headless方法以外,还有xvfb等工具可以使用,本文即记录我使用时碰到的一些流程及坑点。

解决方案

1. headless方法的使用
# 以Chrome为例

# 安装selenium
pip install selenium

# 安装chrome-browser
wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm --no-check-certificate  
sudo yum install google-chrome-stable_current_x86_64.rpm

# 安装chromedriver:一个用来和chrome交互的接口
sudo yum install chromedriver

# 编写test.py文件
vim test.py
# test.py
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument('--headless') # 16年之后,chrome给出的解决办法,抢了PhantomJS饭碗
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--no-sandbox')  # root用户不加这条会无法运行

driver = webdriver.Chrome(chrome_options=chrome_options)
for i in range(10):
    driver.get("https://www.baidu.com/")
    print(driver.title)
driver.close()
# 正常的输出就是10个"百度一下,你就知道"

这个方案中,唯一需要注意的就是--no-sandbox参数的添加,root用户需要注意这点,但是添加以后,访问一些不安全的网站时,容易受到威胁,这需要自己权衡。

2. Xvfb配合使用

In contrast to other display servers, Xvfb performs all graphical operations in virtual memory without showing any screen output.

上面这段话摘自维基百科,简单讲就是,xvfb是一个可以将屏幕的图像输出给放到虚拟内存中的东西,这样一来,在没有GUI的服务器上也能运行一些带图像输出的程序了。

# 安装xvfb
sudo yum update
sudo yum install Xvfb

# 编写test.py文件

# 关于启动,有两种方法可选
# 1. xvfb-run python test.py

# 2. Xvfb :99 & # 给Xvfb开一个指定的显示端口
#    export DISPLAY=:99 # 告诉终端session用哪个端口
#    python test.py
# test.py
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

driver = webdriver.Chrome()
for i in range(10):
    driver.get("https://www.baidu.com/")
    print(driver.title)
driver.close()
# 正常情况下的输出和前面一样

这里需要注意的就是启动方法中2需要给定监视设备端口,否则chrome是没法启动的,具体表现就是无输出,然后卡住。在安装好Xvfb的前提下,还可以使用xvfbwrapper进行调用,统一在python文件中启动,管理也更方便,使用方法如下。

# pip install pyvirtualdisplay

from selenium import webdriver
from pyvirtualdisplay import Display


display = Display(visible=0, size=(800,600))
display.start()

driver = webdriver.Chrome()
for i in range(10):
    driver.get("https://www.baidu.com/")
    print(driver.title)
driver.close()
# 正常的话输出和第一个方法一样

小结

上述两种方法都能在无界面的服务器上使用,文中不当之处还请指出,以上就是我安装使用过程中的一点记录。

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值