【问题标题】:selenium with chromium crash with webworker硒与铬崩溃与网络工作者
【发布时间】:2019-07-09 19:45:45
【问题描述】:

我正在使用:

  • 铬 73
  • 铬 Chrome 驱动程序 73
  • 高山 3.9
  • 硒 Java

在 CI(在 kuberenetes 集群中)中,由于我将 WebWorker 添加到正在测试的应用程序代码中,因此 Web 驱动程序出现崩溃。

崩溃日志在这里 - https://gist.github.com/yosiat/360cb40af0cf7e234a0c6304c8c26ef1

我启用了 chrome webdriver 详细日志记录,我看到了这些行:

[33751:33751:0709/175416.767497:ERROR:validation_errors.cc(76)] Invalid message: VALIDATION_ERROR_DESERIALIZATION_FAILED (DevToolsAgentHost::ChildWorkerCreated deserializer)
[33751:33761:0709/175416.767545:ERROR:render_process_host_impl.cc(4800)] Terminating render process for bad Mojo message: Received bad user message: Validation failed for DevToolsAgentHost::ChildWorkerCreated deserializer [VALIDATION_ERROR_DESERIALIZATION_FAILED (DevToolsAgentHost::ChildWorkerCreated deserializer)
[33751:33761:0709/175416.767578:ERROR:bad_message.cc(27)] Terminating renderer for bad IPC message, reason 123
[1562694856.784][DEBUG]: DevTools WebSocket Event: Inspector.targetCrashed EBB11FCDAB2DEC02066BF3BCD6FF4F8D {

}
[1562694856.784][INFO]: Done waiting for pending navigations. Status: unknown error: cannot determine loading status
from tab crashed
[1562694856.835][INFO]: [d62047bf581d2bfcc6f681474fb0ea28] RESPONSE Navigate ERROR unknown error: session deleted because of page crash
from unknown error: cannot determine loading status
from tab crashed
  (Session info: chrome=73.0.3683.103)

【问题讨论】:

  • 有类似问题:Alphine、Chromium 73 和前三行日志相同。就我而言,它仅在某些站点(不是每个页面)上失败,并且未使用 DevTools 协议。
  • 您运行 chromium 73 而不是最新的稳定版 75(使用 ChromeDriver)有什么特别的原因吗?我的猜测是某种回归,所以尝试使用最新的稳定版。
  • @tukan 这是 alpine repos 中的最后一个版本。

标签: selenium-webdriver webdriver selenium-chromedriver chromium


【解决方案1】:

尝试使用参数 '--disable-dev-shm-usage' 启动 chrome。 示例 JAVA:

  ChromeOptions options = new ChromeOptions();
  options.addArguments("--disable-dev-shm-usage");

很可能由于内存问题而崩溃。 Reference

如果上述解决方案不起作用,那么您可以尝试mounting an emptyDir to /dev/shm and setting the medium to Memory

【讨论】:

  • 已经尝试在 chrome 中禁用 shm 并通过 docker 选项调整 shm 的大小。不工作。
【解决方案2】:

我在尝试在 docker 中设置 nightwatch + chromium + chromedriver 时遇到了完全相同的错误。我们的项目使用 Auth0,而后者又使用网络工作者,其他一些没有网络工作者的网站也可以正常打开。我使用了node:10-alpine 图像并像apk add chromium-chromedriver chromium 这样简单地安装了 chrome 和 chromedriver,尝试了 --privileged 模式和一堆 chrome 标志,但它没有用。

然后我尝试使用它作为基础(现在它安装了 chrome 76)https://github.com/GoogleChromeLabs/lighthousebot/blob/master/builder/Dockerfile 并且它有效。最终的 dockerfile 是这样的

FROM node:10-slim AS test

RUN apt-get update --fix-missing && apt-get -y upgrade

RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
    && sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' \
    && apt-get update \
    && apt-get install -y google-chrome-stable --no-install-recommends \
    && rm -rf /var/lib/apt/lists/* \
    && rm -rf /src/*.deb
RUN npm install nightwatch chromedriver

# copy nightwatch files, etc

并且 chrome 使用 --headless--no-sandbox--disable-gpu 运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    • 2022-01-24
    • 2015-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多