首页 > 解决方案 > 如何解决 Chrome 显示“Aw,Snap!”的问题 通过 ChromeDriver 和 Selenium 通过 Python 3 执行测试时的页面

问题描述

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

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

Aw Snap 页面显示

标签: python-3.xseleniumgoogle-chromeselenium-chromedriverchromium

解决方案


这个错误画面...

啊,啪!

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


原因

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

mount -o remount,size=64M /dev/shm

理想情况下应该是:

mount --bind /tmp/ /dev/shm/

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


深潜

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

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

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


解决方案

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

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


结论

确保这件事:

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

推荐阅读