0%

Centos7下,使用docker部署docker-selenium,远程请求chrome_drive

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远程请求,会自动匹配