Centos7下,使用docker部署docker-selenium,远程请求chrome_drive:
docker pull standalone-chrome
|
docker run -d -p 3786:4444 -e SE_NODE_MAX_SESSIONS=100 -e NODE_MAX_INSTANCES=100 -e SE_NODE_OVERRIDE_MAX_SESSIONS=true -e E_SESSION_REQUEST_TIMEOUT=35 --name selenium-node-chrme1 -v /dev/shm:/dev/shm selenium/standalone-chrome
# --restart 参数会在容器异常时重启,比如hub被压挂了等,在搭建重要项目是都是加上该参数
# --scale chrome=num docker-compose up -d --scale chrome=num //num是要启动节点的数量,chrome是docker-compose文件中节点的名称
# 若需多个node,可重复执行以上命令,修改--name即可。
# --shm-size="2g" 来使用主机的共享内存,防止容器崩溃,这是避免浏览器在 docker 容器内崩溃的已知解决方法,这里是 Chrome和Firefox的记录问题。2gb 的 shm 大小是任意的,但已知效果很好,您的特定用例可能需要不同的值,建议根据您的需要调整此值。
# VNC_NO_PASSWORD=1 没有密码验证的情况下运行 VNC
# VNC_VIEW_ONLY=1 仅查看模式下运行 VNC
# -e SE_EVENT_BUS_HOST= < event_bus_ip | event_bus_name > # -e SE_EVENT_BUS_PUBLISH_PORT=4442 # -e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 节点配置选项: 告诉节点事件总线在哪里,以便它可以注册自己。
# -e SE_NODE_MAX_SESSIONS=10 增加每个容器的会话并发性
# -v /home/ubuntu/files:/home/seluser/files 注意:mkdir /home/ubuntu/files chown 1200:1201 /home/ubuntu/files 挂载数据卷前操作
# -e SE_OPTS= "--log-level FINE" 可以通过将环境变量传递给容器来增加日志输出
# docker logs -f <容器 ID | 容器名称> 所有输出都发送到标准输出,因此可以通过运行检查
# -e JAVA_OPTS=-Xmx512m 告诉节点事件总线在哪里,以便它可以注册自己。
# -e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 # -e SCREEN_WIDTH=1366 # -e SCREEN_HEIGHT=768 # -e SCREEN_DEPTH=24 # -e SCREEN_DPI=74 设置屏幕分辨率
# -e SE_NODE_SESSION_TIMEOUT 网格 URL 和会话超时,默认300秒
# -e E_SESSION_REQUEST_TIMEOUT=500 超时为 500 秒
# -e SE_SESSION_RETRY_INTERVAL=2 重试间隔为 2 秒
# -e SE_NODE_OVERRIDE_MAX_SESSIONS true 启用视频录制
# -e START_XVFB=false 以无头模式运行,默认是true
|
UI面板地址:
http://127.0.0.1:3786/ui#
|
python 运行事例:
from selenium import webdriver
options = webdriver.ChromeOptions() driver = webdriver.Remote(command_executor="http://xxxxx:3786/wd/hub", options=options) driver.get("https://www.baidu.com") print(driver.page_source) driver.close()
|
好处:
那这样做的意义在哪里呢? 我们都知道,selenium 通常是只需要下载一个驱动,然后就可以本地使用了 - 特别需要注意的是,selenium下的驱动和浏览器的版本是对应的,如果版本不对应,那么是没办法请求的
但是docker selenium 就不会有这种问题了,使用docker远程请求,会自动匹配
|