提问人:user16187251 提问时间:11/16/2023 更新时间:11/18/2023 访问量:75
Docker 无法启动新会话。可能的原因是远程服务器地址无效或浏览器启动失败
Docker Could not start a new session. Possible causes are invalid address of the remote server or browser start-up failure
问:
我的Chrome浏览器版本是119.0.6045.160。我的 chrome 驱动程序版本是 119.0.6045.105。 我的 Selenium java 版本是 4.8.3。
我正在用硒做网络报废。它在springboot中运行没有错误。我还设置了二进制路径。
ChromeOptions options = new ChromeOptions();
options.setBinary("C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe");
WebDriver driver = new ChromeDriver(options);
但是,当我运行它的 docker 映像时,我收到错误:
Exception in thread "main" java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:95)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:65)
Caused by: org.openqa.selenium.SessionNotCreatedException: Could not start a new session. Possible causes are invalid address of the remote server or browser start-up failure.
Host info: host: 'dd7e0e343e76', ip: '172.17.0.2'
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:561)
at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:229)
at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:157)
at org.openqa.selenium.chromium.ChromiumDriver.<init>(ChromiumDriver.java:101)
at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:88)
at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:84)
at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:73)
at com.linggd.demo.Duldung2.myrun(Duldung2.java:64)
at com.linggd.demo.Htmltest3Application.main(Htmltest3Application.java:85)
... 8 more
Caused by: org.openqa.selenium.WebDriverException: Timed out waiting for driver process to start.
Build info: version: '4.8.3', revision: 'e5e76298c3'
System info: os.name: 'Linux', os.arch: 'amd64', os.version: '5.10.16.3-microsoft-standard-WSL2', java.version: '17.0.9'
Driver info: driver.version: ChromeDriver
at org.openqa.selenium.remote.service.DriverService.start(DriverService.java:208)
at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:114)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:543)
... 16 more
我认为 docker 中的 chrome 二进制文件可能与我的 chrome 驱动程序存在一些兼容性问题,所以我在 Dockerfile 中指定了 chrome 版本 119.0.6045.159-1,但错误仍然存在。 这是我的 Dockerfile:
FROM debian:bullseye-slim
WORKDIR /app
EXPOSE 8081
# Install required dependencies
RUN apt-get update && apt-get install -y openjdk-17-jre-headless libnss3 libxcb1
RUN apt-get install -y wget libgdk-pixbuf2.0-0 libnss3 libatk-bridge2.0-0 libcups2 libdrm2 libxcomposite1 libxdamage1 libxfixes3 libxrandr2 libgbm1 libxkbcommon-x11-0 libpangocairo-1.0-0 libasound2
ENV CHROME_VERSION "119.0.6045.159-1"
RUN set -ex && \
apt-get update -qqy && \
wget --no-check-certificate https://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_${CHROME_VERSION}_amd64.deb && \
apt-get install -qqyf ./google-chrome-stable_${CHROME_VERSION}_amd64.deb && \
rm google-chrome-stable_${CHROME_VERSION}_amd64.deb
COPY target/springboot-aws-exe.jar /app/
COPY chromedriver.exe /app/chromedriver
ENTRYPOINT ["java", "-jar", "/app/springboot-aws-exe.jar"]
我做错了什么?任何帮助都是值得赞赏的。
答:
1赞
0x00
11/16/2023
#1
问题可能是您使用的映像是 Linux 发行版 (Debian),而您复制到容器的驱动程序似乎是 Windows 的 chrome 驱动程序 () 您需要下载适用于 Linux 的 chrome 驱动程序 (linux64)chromedriver.exe
此外,请确保您的 java 程序指向容器内二进制文件的正确路径。正如您在代码中所示,它当前指向 Windows 计算机内部的路径。
评论
0赞
user16187251
11/16/2023
感谢您提供的信息,对于二进制文件,您的意思是我应该下载 chrome 浏览器二进制文件并在代码中设置路径以指向它吗?
0赞
0x00
11/17/2023
options.setBinary("C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe");
指向主机系统中的 Windows 二进制文件。但是这个二进制文件不会存在于容器中,所以硒不会找到它。即使你把它放在容器里,它也不会工作,因为你正在运行一个 Linux 容器。我不知道 selenium 是否可以只使用 PATH 中的内容,但您需要将其指向容器内的 Chrome。
0赞
user16187251
11/17/2023
我已将其更改为 chrome 二进制文件在容器中的位置,但我仍然收到相同的错误。options.setBinary("/usr/bin/google-chrome");
0赞
0x00
11/17/2023
怎么样?您是否将其更改为 linux64 chrome 驱动程序?COPY chromedriver.exe /app/chromedriver
0赞
user16187251
11/18/2023
是的,我尝试将与我的 dockerfile 目录相同的 linux chrome 驱动程序直接复制到容器中,但它不起作用。COPY chromedriver /app/
评论