chromeDriver报错:WebDriverException: unknown error: session deleted because of page crash

环境

使用docker+chrome_driver进行自动化截图

异常信息

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.openqa.selenium.WebDriverException: unknown error: session deleted because of page crash
from unknown error: cannot determine loading status
from tab crashed
  (Session info: chrome-headless-shell=122.0.6261.94)
Build info: version: 'unknown', revision: 'unknown', time: 'unknown'
System info: host: 'fc932151e48c', ip: '11.0.0.34', os.name: 'Linux', os.arch: 'amd64', os.version: '3.10.0-862.el7.x86_64', java.version: '1.8.0_312'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities {acceptInsecureCerts: false, browserName: chrome-headless-shell, browserVersion: 122.0.6261.94, chrome: {chromedriverVersion: 122.0.6261.94 (880dbf29479c..., userDataDir: /tmp/.org.chromium.Chromium...}, fedcm:accounts: true, goog:chromeOptions: {debuggerAddress: localhost:33196}, javascriptEnabled: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: LINUX, platformName: LINUX, proxy: Proxy(), setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify, webauthn:extension:credBlob: true, webauthn:extension:largeBlob: true, webauthn:extension:minPinLength: true, webauthn:extension:prf: true, webauthn:virtualAuthenticators: true}
Session ID: fe3094fcdb359a9daa2a8e75f50e4e1e
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:517)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:584)
	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:791)
	at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1626)
	at org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:228)
	at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
	at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
	at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)

解决方案

在github上看到说是因为docker容器内的 /dev/shm 内存过小导致的page crash
解决措施:

  • 启动chomedriver时增加参数:--disable-dev-shm-usage12
    :option.addArguments(“–disable-dev-shm-usage”)
    我是通过该种方式解决的问题
    该参数解释解释:
    --disable-dev-shm-usage参数用于禁用Chrome浏览器中的/dev/shm内存临时文件系统的使用。在默认情况下,Chrome浏览器会将其临时文件存储在/dev/shm目录下,这个目录通常是挂载在内存中的,而不是磁盘上。这样做的目的是为了提高性能,因为内存读写速度通常比硬盘读写速度快得多。

    然而,在某些情况下,/dev/shm的内存大小可能会有限,导致Chrome运行过程中占用的内存过多,从而导致Chrome进程被系统强制终止。为了解决这个问题,可以使用--disable-dev-shm-usage参数来禁用Chrome浏览器使用/dev/shm目录,而是使用基于磁盘的临时文件存储。这样可以确保Chrome进程占用的内存不会超出系统限制,从而提高稳定性。

  • 修改 /dev/shm的大小
    1、以特权模式启动:docker run --privileged
    2、修复 /dev/shm 大小过小的问题

docker exec $id sudo umount /dev/shm
docker exec $id sudo mount -t tmpfs -o rw,nosuid,nodev,noexec,relatime,size=512M tmpfs /dev/shm

参考资料:
https://github.com/elgalu/docker-selenium/issues/20
https://stackoverflow.com/questions/53902507/unknown-error-session-deleted-because-of-page-crash-from-unknown-error-cannot

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值