百木园-与人分享,
就是让自己快乐。

python爬虫 - 配置强有力的js绕过神器-selenium grid分布式集群

一,前期说明

 

什么是selenium grid,它就是selenium的三大控件之一,三大控件就是selenium WebDriver,selenium Grid,selenium IDE

 

selenium IDE:负责录制,回放脚本,模拟用户对页面的真是操作

selenium WebDriver:提供强大的浏览器APi操作,覆盖浏览器有:chrome,firefox, microsoft edage,safari,ie等

selenium Grid:用于分布式自动化测试,通过控制多台机器,多个浏览器并行执行测试用例的

 

说白了就是selenium grid就是用来做selenium 分布式集群的,方便控制,不用每个项目或者每个浏览器操作脚本就重写一套selenium代码,然后各自执行,到后面把项目部署到服务器上,一个一个部署,那确实有点累

 

 

 

二,环境部署准备

没什么好准备的,直接用docker镜像,当然你要想在本地搭建一个或者不喜欢用docker,也可以,去selenium官网下载工具:点我

 

 

 

 

 

 

我这里就还是用docker了,安装docker过程就省略了

 

拉取镜像:

 

1.拉取hub镜像

docker pull selenium/hub

这里的hub你可以理解为master或者server端,它自己不会作为执行端,而是调度端,用于调度各个node节点

2.拉取node镜像

docker pull selenium/node-chrome

这里的node你可以理解为salve或者client端,作为执行端

 

然后,因为目前的话,node镜像有很多种:

 

 

 

 

 

我这里就选用chrome版了,看你们个人喜好选用,另外,由于我喜欢实时的看到操作界面,所以我选用了selenium/node-chrome-debug,带有debug字眼的

docker pull selenium/node-chrome-debug

 

3.查看开启可用端口

查看当前开启的端口:

firewall-cmd --list-ports

 

 

 

涉及安全隐私,我就不给图了

 

再看dokcer里有多少已经用过的端口:

docker ps

 

涉及安全隐私,也不给图了

 

看到都用到35005上了,那么我们就从35006开始用,先开启端口:

 

firewall-cmd --add-port=35000-35010/tcp --permanent

 

ok,后面就开始部署了

 

开始部署

1.启动hub节点

 

如果你选用的不是docker而是之前在官网下载的jar包的话,要这么启动,前提需要安装好java的jdk包才行:

 

java -jar selenium-server-standalone-3.141.59.jar -role hub -port 5566

 

docker启动hub节点:

 

docker run -p 35006:4444 -p 35007:5900 -d --name hub selenium/hub

 

2.启动node节点:

 

用jar包文件启动在本地

java -jar selenium-server-standalone-3.141.59.jar -role node -hub http://localhost:5566/grid/register/ -port 5577

 

在docker里启动:

 

docker run -d -p 35008:5900 --link hub:hub --name selenium-node1 -e \"NODE_APPLICATION_NAME=test1\"  selenium/node-chrome-debug

 

说明下:

  • -d意思就是在后台启动,
  • -p就是指定端口映射,
  • –link就是连接到hub,如果连接远程的话,就是 --link hub:远程地址
  • --name 为启动的容器取名
  • -e 就是指为这个镜像设置的参数(每个镜像所需参数不一样),然后这里设置下node节点的名字为test1
  • 最后的selenium/node-chrome-debug就是指我要指定这个镜像来启动

 

然后再启动一个节点,容器名为selenium-node2,节点名为test2

docker run -d -p 35009:5900 --link hub:hub --name selenium-node2 -e \"NODE_APPLICATION_NAME=test2\"  selenium/node-chrome-debug

 

 

当然,你如果不指定以上的参数就是用的默认的设置

 

 

以上启动完了之后,查看:docker ps:

 

 

 

 

三:访问测试

 

打开web地址: <你的服务器ip>:<port>/grid/console  用浏览器打开看看:

 

 

 

 

 

 

查看配置信息:

 

 

 

 

上面的test1和test2就是我们刚才启动node节点时设置的名字了,说明是设置上了的,然后看到默认的额timeout是1800秒,即30分钟

 

 

同时可以看看docker的日志:

docker logs hub:(这里的hub是容器名)

 

 

 

 

 

 

 

 

同时,你也可以用vnc查看,但是我用的vnc viewer老是连不上,最后用了novnc连接成功:

这个,打开的时候会让你输入密码,这个密码是docker的镜像默认的,也就是【secret】,输入之后就会展示下面的界面

 

 

 

 

 

然后node2也是一样的,就不展示了,现在我们要用代码控制了:

 

# coding=utf-8
import time
from selenium import webdriver
chrome_capabilities
= {
\"browserName\": \"chrome\",
\"version\": \"\",
\"platform\": \"ANY\",
\"javascriptEnabled\": True,
\'applicationName\': \'test1\' # 这里指定节点名启动,如果不指定hub则随机选择空闲的node启动
}
browser
= webdriver.Remote(\"http://<你的服务端ip>:<你刚才映射的端口>/wd/hub\", desired_capabilities=chrome_capabilities)
print(123123123, browser)
browser.get(
\"http://www.baidu.com\")
print(browser.title)
time.sleep(
5)
browser.get_screenshot_as_file(
\"8.png\")
browser.quit()

来源:https://www.cnblogs.com/Eeyhan/p/14872357.html
图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » python爬虫 - 配置强有力的js绕过神器-selenium grid分布式集群

相关推荐

  • 暂无文章