引言
工作中用到了Selenium作为爬虫去解析网页,发现单机跑慢的要死,所以找了点资料,将官方的Selenium 集群搭建了起来,下面是搭建的过程。
环境介绍
系统 | jdk环境 | selenium版本 | 安装的浏览器 | 用途 | 别名 |
---|---|---|---|---|---|
Centos7 | 1.8 | 3.141.59 | chrome | server | Hub |
Centos7 | 1.8 | 3.141.59 | chrome | node | Node1 |
Centos7 | 1.8 | 3.141.59 | chrome | node | Node2 |
Centos7 | 1.8 | 3.141.59 | chrome | node | Node3 |
安装Hub
首先从官网上下载好最新版本的selenium-server-standalone.jar
在Hub机器上执行下面的命令,运行hub管理端
screen -dmS selenium java -jar selenium-server-standalone.jar -role hub -maxSession 100 -log /var/log/selenium.log
执行以后会出现下面这样的提示
记住下面的两个URL地址:
第一个地址是注册node的时候回使用到,第二个地址是在代码中会用到
安装Node
将上面下载的jar文件复制到各个节点机器上,然后执行下面命令,注册node节点
screen -dmS selenium java -jar selenium-server-standalone.jar -role node -hub http://10.10.88.51:4444/grid/register/ -capabilities browserName=chrome,platform=linux,maxInstances=30 -log /var/log/selenium.log
记住将-hub
后面的url地址更改为你的hub地址,执行以后会出现下面的界面
然后我们返回Hub机器上看Hub机器上回出现一条这样的提示
可以看到已经成功注册了节点机器。其他节点按照同样的方式进行注册即可。
关于其中的参数可以参考下面的文章:
查看web界面
在注册完node节点以后,我们可以在web界面中看到我们注册的机器的列表以及配置
我们访问Hub机器的url地址为:
http://10.10.88.51:4444/grid/console
将其中的
10.10.88.51
换为你hub机器的ip地址即可访问
至此我们的Selenium 集群以及初步搭建完成,接下来就是使用了
使用Selenium集群
这边我用python代码进行测试Selenium机器是否能正常使用。
代码如下
# -*- coding:utf-8 -*-
# Author: sky
# Email: [email protected]
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--hide-scrollbars')
driver = webdriver.Remote(command_executor="http://10.10.88.51:4444/wd/hub",options=chrome_options)
driver.get("https://www.03sec.com")
driver.implicitly_wait(3)
driver.find_elements_by_tag_name("div")
print(driver.page_source)
driver.quit()
其中chrome_options
请根据自己的情况进行自定义,command_executor
为上面我们记录的第二条url地址,请自行更换
其实和平时写没有什么区别,唯一的区别就是
driver = webdriver.Remote(command_executor="http://10.10.88.51:4444/wd/hub",options=chrome_options)
这条配置
设置Centos7 开机启动
- selenium grid 设置开机启动的命令
mkdir /opt/script
touch /opt/script/autostart.sh
echo "
#!/bin/bash
#description:启动selenium Grid
screen -dmS selenium java -jar selenium-server-standalone.jar -role hub -maxSession 100 -log /var/log/selenium.log
" >> /opt/script/autostart.sh
chmod +x /opt/script/autostart.sh
echo "su - root -c '/opt/script/autostart.sh'" >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
cat /etc/rc.d/rc.local
ls -la /etc/rc.d/rc.local
cat /opt/script/autostart.sh
ls -la /opt/script/autostart.sh
echo "ok"
- selenium node 设置开机启动的命令
mkdir /opt/script
touch /opt/script/autostart.sh
echo "
#!/bin/bash
#description:启动selenium节点
screen -dmS selenium java -jar selenium-server-standalone.jar -role node -hub http://selenium-grid 服务器IP:4444/grid/register/ -capabilities browserName=chrome,platform=linux,maxInstances=30 -maxSession 60 -log /var/log/selenium.log
" >> /opt/script/autostart.sh
chmod +x /opt/script/autostart.sh
echo "su - root -c '/opt/script/autostart.sh'" >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
cat /etc/rc.d/rc.local
ls -la /etc/rc.d/rc.local
cat /opt/script/autostart.sh
ls -la /opt/script/autostart.sh
echo "ok"
安装中遇到的问题
可能会有中文乱码的问题,在centos7下安装下中文字体库即可,
yum groupinstall fonts
总结
集群安装以后,使用和平时没什么两样,速度也差不多。如果你是单机单进程跑,没必要使用集群。如果涉及到多进程或者多线程这样的话,Selenium集群才能真正发挥作用。
hub端传入的timeout会同时设置到节点上(应该)