CentOS + Selenium 用法小结

CentOS + Selenium 用法小结
使用场景
在CentOS下使用Selenium,这里的CentOS是指无GUI的Server版,其特殊性在于,没有可以供输出的显示界面,除了常见的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的前提下,还可以使用xvfb的wrapper进行调用,统一在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()
# 正常的话输出和第一个方法一样

小结
上述两种方法都能在无界面的服务器上使用,文中不当之处还请指出,以上就是我安装使用过程中的一点记录。
————————————————
版权声明:本文为CSDN博主「「已注销」」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wkb342814892/article/details/81591394

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值