注意:我试过用centos 6.5玩Selenium,但是很惨,centos6.5安装配置非常麻烦,而centos7安装过程很顺畅,原因可能是centos6.5对于chrome和chromedriver的支持非常之不好,准确的说不支持chrome而必须采用chromium,chromium的安装很不顺畅,所以,建议玩centos6.5的,可以升级或者重新上一台centos7服务器吧!
在无界面的CentOS7上安装Selenium+Chrome,并使用facebook的php-webdriver测试
系统环境
CentOS Linux 7 (Core)
1 2 3 |
Operating System: CentOS Linux 7 (Core) Kernel: Linux 3.10.0-693.17.1.el7.x86_64 Architecture: x86-64 |
安装 chrome
使用下面的命令,在root用户下就可以安装最新的 Google Chrome:
1
|
yum install https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm
|
安装 selenium
在 seleniump官网 找到最新的版本,下载selenium-server-standalone-X.XX.X.jar
文件
注意:最新的版本3.11,不是3.9(2018年3月)
selenium-server-standalone-3.11.0.jar
selenium服务初始化
将上述selenium放入一个文件夹中,输入如下命令初始化
java -jar selenium-server-standalone-3.11.0.jar
注意,需要 java8 环境,可以参考 CentOS7安装java运行环境jdk
安装 chromerriver
在 chromerriver官网下载最新的ChromeDriver压缩包,解压得到chromedriver.exe文件
chromedriver_linux64.zip 2018-03-20 15:22:39
将下载的文件解压,放在如下位置
/usr/bin/chromedriver
给予执行权限
chmod +x /usr/bin/chromedriver
安装 XVFB
输入如下命令
1 2 |
# yum install Xvfb -y # yum install xorg-x11-fonts* -y |
新建在/usr/bin/ 一个名叫 xvfb-chrom 的文件写入以下内容:
vi /usr/bin/xvfb-chrome
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#!/bin/bash _kill_procs() { kill -TERM $chrome wait $chrome kill -TERM $xvfb } # Setup a trap to catch SIGTERM and relay it to child processes trap _kill_procs SIGTERM XVFB_WHD=${XVFB_WHD:-1280x720x16} # Start Xvfb Xvfb :99 -ac -screen 0 $XVFB_WHD -nolisten tcp & xvfb=$! export DISPLAY=:99 chrome --no-sandbox --disable-gpu$@ & chrome=$! wait $chrome wait $xvfb |
添加执行权限
chmod +x /usr/bin/xvfb-chrome
查看当前映射关系
ll /usr/bin/ | grep chrom
1 2 3 |
-rwxr-xr-x 1 root root 7874704 Mar 20 14:55 chromedriver lrwxrwxrwx 1 root root 31 Mar 20 00:24 google-chrome -> /etc/alternatives/google-chrome lrwxrwxrwx 1 root root 32 Mar 20 14:30 google-chrome-stable -> /opt/google/chrome/google-chrome |
更改Chrome启动的软连接
1 2 3 |
ln -s /etc/alternatives/google-chrome /usr/bin/chrome rm -rf /usr/bin/google-chrome ln -s /usr/bin/xvfb-chrome /usr/bin/google-chrome |
查看修改后的映射关系
ll /usr/bin/ | grep chrom
1 2 3 4 5 |
-rwxr-xr-x 1 root root 7874704 Mar 20 14:55 chromedriver lrwxrwxrwx 1 root root 31 Mar 20 00:24 chrome -> /etc/alternatives/google-chrome lrwxrwxrwx 1 root root 22 Mar 20 00:11 google-chrome -> /usr/bin/xvfb-chromium lrwxrwxrwx 1 root root 32 Mar 20 14:30 google-chrome-stable -> /opt/google/chrome/google-chrome -rwxr-xr-x 1 root root 432 Mar 20 00:09 xvfb-chrome |
使用facebook的php-webdriver测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
<?php // An example of using php-webdriver. // Do not forget to run composer install before and also have Selenium server started and listening on port 4444. namespace Facebook\WebDriver; use Facebook\WebDriver\Remote\DesiredCapabilities; use Facebook\WebDriver\Remote\RemoteWebDriver; require_once('vendor/autoload.php'); // start Chrome with 5 second timeout $host = 'http://localhost:4444/wd/hub'; // this is the default $capabilities = DesiredCapabilities::chrome(); $driver = RemoteWebDriver::create($host, $capabilities, 5000); // navigate to 'http://www.baidu.com/' $driver->get('https://www.baidu.com/'); // wait until the page is loaded // $driver->wait()->until( // WebDriverExpectedCondition::titleContains('百度') // ); // print the title of the current page echo "The title is '" . $driver->getTitle() . "'\n"; // print the URI of the current page echo "The current URI is '" . $driver->getCurrentURL() . "'\n"; // print the pagesource of the current page $html_selenium = $driver->getPageSource(); echo $html_selenium; // close the browser $driver->quit(); |