首页 > 解决方案 > 尝试制作屏幕截图时如何修复python-selenium崩溃?

问题描述

使用 selenium 4.0.0 for python,我收到一个错误

selenium.common.exceptions.WebDriverException: Message: unknown error: session deleted because of page crash
from unknown error: cannot determine loading status
from tab crashed
  (Session info: headless chrome=94.0.4606.81)

当代码尝试制作屏幕截图时。追溯是

  ...
  File "/usr/local/lib/python3.8/site-packages/check_pages/page_dom_check.py", line 57, in make_full_screenshot
    img = Image.open(BytesIO((driver.get_screenshot_as_png())))
  File "/usr/local/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 1064, in get_screenshot_as_png
    return base64.b64decode(self.get_screenshot_as_base64().encode('ascii'))
  File "/usr/local/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 1074, in get_screenshot_as_base64
    return self.execute(Command.SCREENSHOT)['value']
  File "/usr/local/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "/usr/local/lib/python3.8/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)

我不能发布一个小的可重现代码,因为它只有在我在 gitlab CI 中运行时才会发生。但它总是在制作屏幕截图时发生。

也许还有另一种制作屏幕截图的方法?

标签: pythonselenium

解决方案


我的问题没有答案,但我创建了一个似乎可行的解决方法。

我正在创建一个硒驱动程序,而那个驱动程序正在打开不同的页面。在这里我得到了错误。

# pseudocode
driver = ...
for check in checks:
    driver.get(url)
    # do other stuff with driver
driver.quit()

若要解决此问题,请分别为每个页面创建一个新驱动程序。

# pseudocode
for check in checks:
    driver = ...
    driver.get(url)
    # do other stuff with driver
    driver.quit()

这样,您甚至可以将驱动程序周围的所有内容放在 try-except 循环中以重试

# pseudocode
for check in checks:
    while ...
        try:
            driver = ...
            driver.get(url)
            # do other stuff with driver
            driver.quit()
        except UselessException:
            pass

推荐阅读