【Selenium】Centos6.5环境下使用Selenium+Chrome

前言

最近在尝试做自动登陆网页的项目,用到了Selenium+browsermob-proxy+chrome,一开始的时候我不知道chrome也可以进行无头界面操作,所以尝试了Chrome的有界面操作和PhantomJS无界面操作的两种方法。但是我发现PhantomJS使用起来并不那么舒服,存在问题导致程序时好时坏,直到我最近了解到了chrome的无界面操作才放弃了PhantomJS。
chrome浏览器更新到59版本之后在正式版里加入了headless模式 ,也就是可以操纵chrome进入无界面模式。
今天要讲的重点是,我是在本地(window环境)开发的,然后最后要部署到Linux的环境下。我在本地开发一切正常,可是部署到服务器上后(服务器用的是Centos6.5)就遇到各种问题。

遇到的问题

一.使用chromeDriver的前提是要有chrome浏览器

由于我在本地时使用的是chrome,所以我也不打算换浏览器了。
与PhantomJS不同的是,PhantomJS本身就是一个无界面浏览器,所以开发环境里并不需要有浏览器,而chrome是有界面浏览器,我们现在利用的只是它的headless模式,使他不要显示界面,但实际它还是在浏览器内操作的,所以开发环境里必须要有chrome浏览器,否则当你执行chromedriver时会报错:

org.openqa.selenium.WebDriverException: unknown error: cannot find Chrome binary

这就是提示我们需要有chrome浏览器。
但是要注意的是:chrome已经不支持Linux 32位了,也不支持Centos,所以如果你使用的是Centos的话,只能安装Chromium(和chrome差不多,都是google的产品,这个是开源项目)。Centos 6.5上安装Chromium:

# cd /etc/yum.repos.d
# wget http://people.centos.org/hughesjr/chromium/6/chromium-el6.repo
# yum install chromium

二、运行chromeDriver要有运行库高版本的支持

安装成功后,可以先测试一下是否可行,执行chromeDriver程序,然后又报错了:

NSS_VersionCheck("3.26") failed. NSS >= 3.26 is required

也就是说要升级NSS版本,升级版本:

# yum install nss.x86_64

查看现有NSS的版本:

rpm -qa | grep nss

再执行继续报错:

/lib64/libc.so.6: version `GLIBC_2.14' not found (required by /usr/ydx/chromedriver)

解决方法请看上一篇文章。
emm….我的确是一直在解决Bug….感觉遇到Bug的心情真的很复杂,解决不了的时候很爆炸,成功解决了又很有成就感…解决Bug的过程也是成长的过程啊~~

三、安装虚拟图形环境Xvfb

但是就算我解决了上面的问题,仍然无法成功运行,还是继续报错,哇真是爆炸!!!
这里写图片描述

这是因为Linux是没有图形界面的,而使用selenium+chrome需要依赖于图形界面,所以我们需要安装一个虚拟图形环境:Xvfb是一个实现了X11显示服务协议的显示服务器。 不同于其他显示服务器,Xvfb在内存中执行所有的图形操作,不需要借助任何显示设备。
安装Xvfb:

# cd /tmp
# wget http://vault.centos.org/6.5/os/x86_64/Packages/xorg-x11-server-Xvfb-1.13.0-23.el6.centos.x86_64.rpm
# yum install xorg-x11-server-Xvfb-1.13.0-23.el6.centos.x86_64.rp   
m

安装好后我们运行Xvfb:

# Xvfb -ac :7 -screen 0 1280x1024x8 -extension RANDR -nolisten inet6 &

在执行语句里使用了“ -extension RANDR -nolisten inet6”是因为Xvfb 默认使用 ipv6,如果不添加就会报错:

XSERVTransSocketOpenCOTSServer: Unable to open socket for inet6
_XSERVTransOpen: transport open failed for inet6/VM_0_3_centos:7
_XSERVTransMakeAllCOTSServerListeners: failed to open listener for inet6

当显示下面内容的时候就证明安装成功了:
【Selenium】Centos6.5环境下使用Selenium+Chrome_第1张图片

启动chrome:

export  DISPLAY=:7 (和上一步的number号相同)

参考文章:
1. Chrome failed to start: exited abnormally
2.在服务器上跑 Java Selenium 的教程
3. selenium使用chrome的headless模式
4.Unable to open socket for inet6

你可能感兴趣的:(selenium)