如何处理通过Python 3、ChromeDriver和Selenium执行测试时,Chrome显示“Aw, Snap!”页面的问题

4
大约运行一个小时后,我的Selenium浏览器会显示一个“哎呀,崩溃啦!”页面,在控制台无法与浏览器进行任何交互,必须关闭浏览器并重新启动脚本。是否有对此的解释或简单解决方法?Aw Snap page display

1
包括你运行的代码以产生这个错误是找到答案的好开始。 - CEH
我正在使用Selenium Chrome浏览器爬取位置信息。大约有1000个位置出现了“噢,崩溃了!”的错误。我在每个大约250个位置后包含了delete_all_cookies(),以为浏览器可能会超载,但这并没有起作用。 - zSomnolence
这是一个问题描述,但仍不是代码示例。最好的方法可能是以一种方式分割您的URL,以便每200个URL关闭并重新初始化WebDriver实例。 - CEH
真不敢相信我没想到那个!谢谢,我会试一下的。 - zSomnolence
1
那个页面意味着你已经失去了与互联网的连接,所以除了玩恐龙游戏外,没有什么可以做的了。 - pcalkins
1
“Aw snap”并不意味着无网络连接,更可能表示您的内存不足。 - pguardiario
2个回答

5

这个错误屏幕...

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的大小已经大大减小。

深入了解

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

  • util_posix.cc:GetShmemTempDir在Linux上尝试始终使用/dev/shm用于非可执行内存。
  • /dev/shm所需的大小大大取决于渲染器的数量、屏幕分辨率等。
  • 有时,由于大型Web应用程序,您可能会在耗尽/dev/shm空间之前就耗尽内存。
  • 有时,一些Docker容器默认会严格限制其共享内存的大小,这对于某些工作负载可能是可以接受的,并且可能防止任何容器占用所有内存。

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


解决方案

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

CreateAnonymousSharedMemory()被修改为将可写内存句柄作为文件描述符而不是文件返回。由于POSIX没有提供一种标准方法来撤销文件而不关闭底层文件描述符,因此通过泄漏文件来实现了这一点。 我们现在提供CreateAndOpenFdForTemporaryFileInDir(),以避免完全包装临时文件描述符到文件中的需要。


结论

确保:

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

1
如何在使用Docker时修复此错误? - boygiandi

-1

我有同样的问题,我通过在函数内每30分钟自动重启我的驱动程序来解决它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接