一、基本认识:
分布式执行其实是将脚本转化成指令发送给hub,再由hub分发给node,然后node返回执行结果;所以一切打印和获取都会由执行指令的node返回给hub,然后返回给脚本执行地。
1、连接远程资源都需要host+port
2、selenium grid就是遵从第一点建立连接(协议)
3、hub主节点、node分支节点
1-hub节点和node节点,没有固定要求的先后部署顺序
2-hub\node是通过host+port进行衔接(交流沟通-->神经)
二、环境部署:
1、环境部署方式:
1-本地部署
2-容器部署(docker)
2、部署操作
(1)下载selenium grid(稳定版)
https://www.selenium.dev/downloads/
(2)放到指定文件夹(自定义d://download)
(3)切换到文件夹
3、命令行部署
1-在命令行中切换在下载jar包所在目录:
d:
cd d://download
2-注册hub\node:(不指定端口就默认)
1)注册hub:java -jar <你的jar包> -role hub -port 4444
2)注册node:java -jar <你的jar包> -role node -port 4445
4、json部署
注册hub\node:
1)注册hub:java -jar <你的jar包> -role hub hubConfig <hub的json配置文件> -debug
2)注册node:java -jar <你的jar包> -role node nodeConfig <node的json配置文件> -debug
5、docker部署
1-下载docker
https://www.docker.com/
2-安装docker(傻瓜式安装)
3-运行docker
4-在docker容器中下载各个节点的镜像(terminal里输入):
1)docker pull selenium/hub 拉取hub节点的镜像
2)docker pull selenium/node-chrome-debug 拉取node节点的镜像
3)docker pull selenium/node-firefox-debug 拉取node节点的镜像
5-启动镜像:
1)启动hub:docker run -d -p 4444:4444 --name selenium-hub selenium/hub
2)启动node:docker run -d --link selenium-hub:hub selenium/node-chrome
拉取后的效果 启动镜像: 启动成功: 查看和修改IP
6、使用:
import time
from selenium import webdriver
url = "http://192.168.11.1:4444/wd/hub"
desired_capabilities = {
"browserName":"chrome",
"version":"",
"platform":"any",
"javascriptEnabled":"true"
}
driver = webdriver.Remote(url,desired_capabilities=desired_capabilities)
driver.get("https://www.baidu.com")
driver.find_element("id","kw").send_keys("selenium grid")
driver.find_element("id","su").click()
time.sleep(2)
driver.get_screenshot_as_file("baidu.png")
driver.quit()
经常遇到的错误 1)浏览器驱动版本问题 2)hub节点没启动 会报错:selenium grid urllib3.exceptions.MaxRetryError
|