【问题标题】:selenium.common.exceptions.WebDriverException: Message: unknown error: unhandled inspector error using screenshot_as_png in Selenium Pythonselenium.common.exceptions.WebDriverException:消息:未知错误:在 Selenium Python 中使用 screenshot_as_png 出现未处理的检查器错误
【发布时间】:2021-05-22 20:15:06
【问题描述】:

对于存在但未出现在网站界面中的 CSS,它会给出此错误。

我的代码(站点和 css 是示例):

driver.get("www.example.com")
element = driver.find_element_by_css_selector("css").screenshot_as_png

错误:

selenium.common.exceptions.WebDriverException: Message: unknown error: unhandled inspector error: {"code":-32000,"message":"Cannot take screenshot with 0 width."}

但如果链接发生变化,即尝试从出现正文的链接中截取屏幕截图,它可以正常工作。

我试图做的是继续没有任何错误。因为当它失败时,脚本就会停止。

解决方案

经过一番研究,我找到了解决方案。 代码(站点和 css 是示例):

driver.get("www.example.com")
try:
    WebDriverWait(driver, 0).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "css")))
    element = driver.find_element_by_css_selector("css").screenshot_as_png
    print ("element visible")

except TimeoutException:
    print ("element not visible")

【问题讨论】:

    标签: python selenium png screenshot element


    【解决方案1】:

    有一个属性叫

    WebElement.screenshot_as_png
    

    这会将 png 作为二进制数据返回,如果要将图像存储为文件,可以使用 .screenshot() 方法

    WebElement.screenshot("hi.png")
    

    您可以在以下位置查看 webelement 的所有可用方法和属性:

    https://www.selenium.dev/selenium/docs/api/py/webdriver_remote/selenium.webdriver.remote.webelement.html

    示例:

    driver.find_element_by_id("anyid").screenshot_as_png
    
    driver.find_element_by_id("anyid").screenshot("hi.png")
    

    根据错误,屏幕截图由于其宽度而无法正常工作,请在截图之前查看元素是否正确可见

    使用 webdriver 等待:

    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    wait = WebDriverWait(browser, 10)
    
    elem= wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, 'somelocator')))
    

    【讨论】:

    • 是的,我使用了接近这个的东西并修复了它。太感谢了。但我想做的是截取元素所在位置的屏幕截图。我稍后保存。所以现在没有问题。
    • @HengenAsdwdrasd 这确实可以让您使用任何定位器
    • 如果有帮助,您可以按 tikc 标志接受答案
    【解决方案2】:

    remote webdriver 没有screenshot_as_png 属性,但方法是get_screenshot_as_png(),它将当前窗口的屏幕截图作为二进制数据获取。

    • 用法:

      driver.get_screenshot_as_png()
      

    解决方案

    本质上,get_screenshot_as_png() 是一个 webdriver 方法,您的有效代码块将是:

    element_screenshot_png = driver.get_screenshot_as_png()
    

    参考

    您可以在以下位置找到一些相关的详细讨论:

    【讨论】:

    • 我不想截取完整的屏幕截图。此外,我的错误似乎与屏幕截图有关,但事实并非如此。不管怎样,谢谢你。我解决了这个问题,很快就会解释解决方案。
    • 那是不正确的说法,selenium.dev/selenium/docs/api/py/webdriver_remote/…,它有这个属性
    猜你喜欢
    • 2020-10-16
    • 2018-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-21
    • 2020-11-01
    • 2020-04-16
    • 1970-01-01
    相关资源
    最近更新 更多