python-3.x - 如何解决 Chrome 显示“Aw,Snap!”的问题 通过 ChromeDriver 和 Selenium 通过 Python 3 执行测试时的页面
问题描述
运行大约一个小时后,我的 selenium 浏览器将显示“Aw, Snap!” 页面,我无法从控制台以任何方式与浏览器交互,我必须关闭浏览器并重新启动我的脚本。
对此有解释或简单的解决方法吗?
解决方案
这个错误画面...
...意味着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用户身份执行。
推荐阅读
- eclipse - Eclipse 调试仅使用 SpringBootTest webEnvironment 忽略断点
- javascript - 如何修复以下 html 中的 Javascript?
- javascript - 如何从网站上的 jplot 图中获取数据
- c++ - 偏移量和步幅
- php - 如何用 php 执行 .sh 文件
- python - 如何使用 Robot Framework 处理 Appium 中的 DatePicker?
- go - 将 `decimal.NullDecimal` 类型转换为 int
- sql - 带有当前时间的 SQL WHERE 子句
- javascript - 一起使用 reduce 和 sort (JavaScript)
- http - 如果我禁用 cookie,网站还能跟踪我吗?