【发布时间】:2019-11-21 08:37:54
【问题描述】:
我正在尝试为我的 selenium 测试构建一个 docker 映像。但是我不断收到错误消息“org.openqa.selenium.WebDriverException: unknown error: Chrome failed to start: crashed”。
请不要将此标记为重复,尽管我在下面的链接中提到了很多答案。我仍然无法通过这个。我已经尝试了所有提供的答案,但没有运气。 Selenium: WebDriverException:Chrome failed to start: crashed as google-chrome is no longer running so ChromeDriver is assuming that Chrome has crashed
请找到 docker 文件代码和我的 selenium 代码。
Docker 文件代码如下所示:
FROM selenium/standalone-chrome
FROM gradle
RUN gradle wrapper
USER root
RUN apt-get update; apt-get -y install wget gnupg2
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub |
apt-key add -
RUN echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable
main" >> /etc/apt/sources.list.d/google-chrome.list
RUN apt-get update; apt-get -y install google-chrome-stable
COPY . /project
RUN chown -R gradle:gradle /project
RUN wget -N
http://chromedriver.storage.googleapis.com/76.0.3809.25/chromedriver_linux64.zip -P ~/
RUN unzip ~/chromedriver_linux64.zip -d ~/
RUN rm ~/chromedriver_linux64.zip
RUN mv -f ~/chromedriver /project/executables/chromedriver
RUN chown gradle:gradle /project/executables/chromedriver
RUN chmod 0755 /project/executables/chromedriver
USER gradle
WORKDIR /project
ENV GRADLE_USER_HOME /project/.gradle_home
CMD gradle build --info
硒代码:
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--headless");
chromeOptions.addArguments("start-maximized"); // open Browser in maximized mode
chromeOptions.addArguments("disable-infobars"); // disabling infobars
chromeOptions.addArguments("--disable-extensions"); // disabling extensions
chromeOptions.addArguments("--disable-gpu"); // applicable to windows os only
chromeOptions.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems
chromeOptions.addArguments("--no-sandbox"); // Bypass OS security model
System.setProperty("webdriver.chrome.driver","executables/chromedriver");
Webdriver driver = new ChromeDriver(chromeOptions);
driver.get("http://google.com");
正如您从错误消息中看到的那样,chrome 从默认位置(usr/bin/google-chrome)开始,但它正在崩溃。
Starting ChromeDriver 76.0.3809.25 (a0c95f440512e06df1c9c206f2d79cc20be18bb1-refs/branch-heads/3809@{#271}) on port 30275
Only local connections are allowed.
" org.openqa.selenium.WebDriverException: unknown error: Chrome failed to start: crashed" .
(unknown error: DevToolsActivePort file doesn't exist)
(The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
System info: host: 'd2e61fa0170d', ip: '172.17.0.2', os.name: 'Linux', os.arch: 'amd64', os.version: '4.9.125-linuxkit', java.version: '1.8.0_212'
Driver info: driver.version: ChromeDriver
我正在使用最新的 chrome 驱动程序 76.0.3809.25。我假设获取并安装了最新的 google chrome
感谢任何帮助
【问题讨论】:
-
第一次 Chrome 运行将设置某些目录/配置...因此您可能只需要运行一次然后关闭它,然后再运行“新 ChromeDriver”命令。
-
能否详细说明
-
我注意到如果第一次运行是通过 Selenium 调用完成的,Chrome 会崩溃......所以我认为这可能需要检查。虽然我昨晚确实得到了这个特殊的例外,但事实并非如此,所以它可能是别的东西。 (当时我一个接一个地运行多个 Chrome 实例,但我还没有机会解决这个问题。)
-
我感觉这是时间问题。当 Selenium 启动 Chrome 时,它会为临时配置文件创建一个临时文件夹。这部分可能会失败,因为它是在清理另一个实例期间运行的。
-
有人提到“--no-sandbox”选项必须是第一行。我想知道您是否尝试过...(我还没有尝试过,因为我没有可重复的场景...)
标签: selenium docker google-chrome selenium-webdriver gradle