如何解决 Chrome 显示“噢,啪!”的问题 通过 Python 3 通过 ChromeDriver 和 Selenium 执行测试时的页面

zSo*_*nce 4 selenium google-chrome chromium python-3.x selenium-chromedriver

运行大约一个小时后,我的硒浏览器将显示“Aw, Snap!” 页面,我无法从控制台以任何方式与浏览器交互,我必须关闭浏览器并重新启动我的脚本。

对此有解释或简单的解决方法吗?

噢 快照页面显示

Deb*_*anB 5

这个错误画面...

噢,啪!

...意味着ChromeDriver在加载新的浏览上下文(即Chrome 浏览器会话)时遇到问题。


原因

在运行基于Chrome 浏览器的Selenium测试大约一个小时后,您会看到此错误,并且此问题可能是由于/dev/shmie大小减小而/dev/shm空间不足而发生的。举个例子:

mount -o remount,size=64M /dev/shm
Run Code Online (Sandbox Code Playgroud)

理想情况下应该是:

mount --bind /tmp/ /dev/shm/
Run Code Online (Sandbox Code Playgroud)

在 Docker 环境中运行 Chromium 时,64M大小几乎处于缩减状态。


深潜

根据问题 522853 中的讨论:Linux:Chrome/Chromium SIGBUS/Aw,Snap!在小 /dev/shm 上

  • util_posix.cc:GetShmemTempDir在 Linux 上尝试始终使用/dev/shm不可执行内存。
  • 所需的大小/dev/shm很大程度上取决于渲染器的数量、屏幕分辨率等。
  • 有时,即使在空间不足之前,您也可能会因大型网络应用程序而耗尽内存/dev/shm
  • 有时,一些 Docker 容器决定默认严格限制其共享内存的大小,这对于某些工作负载来说可能没问题,并且可能会阻止任何容器占用所有内存。

这个问题在以下讨论中进行了详细的分析和讨论:


解决方案

这个问题最终通过提交/修订得到解决,修复了CreateAnonymousSharedMemory()返回 fd 时不泄漏 FILE 的问题。

CreateAnonymousSharedMemory() 已修改为以文件描述符而不是 FILE 的形式返回可写内存句柄。由于 POSIX 不提供在不关闭底层文件描述符的情况下拆除 FILE 的标准方法,因此这是通过泄漏 FILE 来实现的。我们现在提供CreateAndOpenFdForTemporaryFileInDir(), 以避免将临时文件描述符包装到 FILE 中。


结论

确保这件事:

  • /dev/shm/已安装有足够的内存。
  • Selenium升级到当前级别Version 3.141.59
  • ChromeDriver已更新至当前ChromeDriver v79.0.3945.36级别。
  • Chrome已更新至当前Chrome 版本 79.0级别。(根据ChromeDriver v78.0 发行说明
  • 通过IDE清理项目工作区并仅使用所需的依赖项重建项目。
  • 如果您的基本Web 客户端版本太旧,请通过Revo Uninstaller卸载它并安装最新的 GA 和发布版本的Web 客户端
  • 重新启动系统
  • @Test非 root用户身份执行。

  • 使用 docker 运行时如何修复此错误? (2认同)