selenium使用docker部署注意事项

/ 技术收藏 / 没有评论 / 304浏览
  1. 首先,如果使用的springboot,那么在pom.xml中需配置,原因是,如果不指定,则会被springboot(2.7.12)默认指定为4.1.4,导致版本不统一
<properties>
    <selenium.version>4.19.1</selenium.version>
</properties>
<dependency>
  <groupId>org.seleniumhq.selenium</groupId>
  <artifactId>selenium-java</artifactId>
  <version>4.19.1</version>
</dependency>
  1. docker部署命令
docker run -d -p 4444:4444 -p xxxx:7900 --shm-size="2g" -e SE_NODE_GRID_URL=http://xxxx:xxxx:4444 -e SE_NODE_MAX_SESSIONS=5 -e SE_NODE_OVERRIDE_MAX_SESSIONS=true --name=selenium selenium/standalone-chrome:latest

这里解释一下,因为部署在docker下,所以服务端返回的地址是docker内网地址,会导致无法连接devtools的websocket,所以这里需要指定环境变量SE_NODE_GRID_URL,手动指定服务器的域名和端口。 SE_NODE_OVERRIDE_MAX_SESSIONS 和 SE_NODE_MAX_SESSIONS 这两个是设定允许最大的会话数,一个是确认覆盖,另外一个是设置会话数量。以上内容全部参考:

https://github.com/SeleniumHQ/selenium/issues/10117
https://github.com/SeleniumHQ/docker-selenium#grid-url-and-session-timeout
  1. 7900为VNC端口,直接可以通过网页访问,4444为通讯端口
http://x.x.x.x:7900/?autoconnect=1&resize=scale&password=secret
http://x.x.x.x:4444/ui/#/sessions 这个是ui
http://x.x.x.x:4444/wd/hub/status 这个是状态端点

本地访问,注意webdriver和chrome版本一定要一致

//设置环境变量
System.setProperty("webdriver.chrome.driver","C:\\dev\\driver\\chromedriver.exe");
// 创建 ChromeOptions 对象
ChromeOptions options = new ChromeOptions();
// 设置无界面模式
options.addArguments("--headless");
//允许远程连接
options.addArguments("--remote-allow-origins=*");
// 添加 --remote-debugging-port=9222 参数
options.addArguments("--remote-debugging-port=9222");
//这里不要使用本地浏览器,版本会升级,切驱动号不一定对的上
options.setBinary("C:\\dev\\driver\\chrome-win64\\chrome.exe");
driver = new ChromeDriver(options);
devTools =  driver.getDevTools();
devTools.createSession();

附下载地址

https://googlechromelabs.github.io/chrome-for-testing/