1.docker镜像下载
docker search selenium
查找selenium相关的镜像,选择红框下载
docker pull selenium/hub #用于管理节点
docker pull selenium/node-chrome-debug #chrome节点
docker pull selenium/node-firefox-debug #firefox节点
2. 启动selenium hub
docker run -d -p 4444:4444 --name hub selenium/hub
通过本机ip:4444可以访问到如下界面说明启动成功
3.启动selenium Node
docker run -d -p 5900:5900 --name chrome --link hub -e NODE_MAX_INSTANCES=10 -e NODE_MAX_SESSION=10 -v /dev/shm:/dev/shm selenium/node-chrome-debug
docker run -d -p 5901:5900 --name firefox --link hub -e NODE_MAX_INSTANCES=5 -e NODE_MAX_SESSION=5 -v /dev/shm:/dev/shm selenium/node-firefox-debug
#NODE_MAX_INSTANCES和NODE_MAX_SESSION指定窗口可以并行的浏览器数量
#请根据物理机器内存决定设置多少
启动Node后,点击上方图片中 console 链接 ,可以看到如下界面,说明node启动成功,并成功链接到了hub
4. 安装VNC viwer
vnc viwer 可以实现远程可视化调试,脚本运行时可以通过此工具看到运行时的各种情况
下载地址
https://www.realvnc.com/en/connect/download/viewer/
安装完成运行后,点击 “File”->“New Connection”
VNC server填写为 “hubip:node port”
name自己指定就行
点击ok完成创建
双击新建的连接,会要求输入密码,默认密码为 sercet
连接成功后,会出现如图
5.准备测试脚本
单线程脚本
import time
from selenium.webdriver import Remote
def test(host,broser):
print(f"开始连接{host}")
driver = Remote(command_executor=host,
# 这个参数一定要写,否则HUB不知道应该分配给谁执行
desired_capabilities={'browserName':'chrome'})
print(f"连接完成{host}")
driver.get("http://www.baidu.com")
driver.find_element_by_id("kw").send_keys(broser)
driver.find_element_by_id("su").click()
print("执行完成")
time.sleep(5)
# 这里只是关闭了浏览器,并没有退出实例
driver.close()
print("浏览器关闭")
time.sleep(10)
# 这里注意一定要写quit(),否则会造成浏览器实例一直被占用
driver.quit()
print("进程关闭")
if __name__ == '__main__':
test("http://192.168.40.44:4444/wd/hub","chrome")
执行结果如图
多线程脚本
当然也可以多进程,看自己的需要
import time
from selenium.webdriver import Remote
import threading
def test(host,broser):
driver = Remote(command_executor=host,desired_capabilities={'browserName':'chrome'})
print(f"连接完成{host,time.ctime()}")
driver.get("http://www.baidu.com")
driver.find_element_by_id("kw").send_keys(broser)
driver.find_element_by_id("su").click()
print("开始等待")
time.sleep(5)
print(f"执行完成{time.ctime()}")
time.sleep(5)
driver.close()
print("浏览器关闭")
time.sleep(10)
driver.quit()
print(f"进程关闭{time.ctime()}")
if __name__ == '__main__':
ts = []
for i in range(3):
# 三个线程同时跑
ts.append(threading.Thread(target=test,args=("http://192.168.40.44:4444/wd/hub","chrome")))
print(ts)
for i in ts:
i.start()
for i in ts:
i.join()
执行结果
执行上方脚本,可以看到远程同时打开了3个浏览器
执行时间如下:
[<Thread(Thread-1, initial)>, <Thread(Thread-2, initial)>, <Thread(Thread-3, initial)>]
连接完成('http://192.168.40.44:4444/wd/hub', 'Thu Dec 24 17:52:46 2020')
连接完成('http://192.168.40.44:4444/wd/hub', 'Thu Dec 24 17:52:46 2020')
连接完成('http://192.168.40.44:4444/wd/hub', 'Thu Dec 24 17:52:46 2020')
开始等待
开始等待
开始等待
执行完成Thu Dec 24 17:52:53 2020
执行完成Thu Dec 24 17:52:53 2020
执行完成Thu Dec 24 17:52:53 2020
浏览器关闭
浏览器关闭
浏览器关闭
进程关闭Thu Dec 24 17:53:08 2020
进程关闭Thu Dec 24 17:53:08 2020
进程关闭Thu Dec 24 17:53:08 2020