python - selenium.common.exceptions.WebDriverException:消息:未知错误:在 Selenium Python 中使用 screenshot_as_png 出现未处理的检查器错误
问题描述
它为存在但未出现在站点界面中的 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")
解决方案
有一个属性叫
WebElement.screenshot_as_png
这会将 png 作为二进制数据返回,如果要将图像存储为文件,可以使用 .screenshot() 方法
WebElement.screenshot("hi.png")
您可以在以下位置查看 webelement 的所有可用方法和属性:
例子:
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')))
推荐阅读
- apache - Cookie 规范设置为过时的 RFC2109spec RFC2965spec 和 apache HttpClient4.4.4 中的 netscape 规范
- r - utils:::fixInNamespace 是否会进行永久性更改?R
- matlab - 如何在 Matlab 中内插和外推非单调向量数据集
- django - Django 拒绝使用 DB 视图
- uml - 什么是问题域类和问题域对象?
- node.js - 在 Feathersjs 中找不到服务
- jquery - 使用 jQuery 从其他函数中检查函数内部的真/假
- java - MongoDB Inc. 的异步驱动程序 (java) 是否通过连接多路复用请求?
- c++ - ROS环境中的构建错误(catkin)
- c# - 关于设置 DataGrid DataContext 的 ArgumentOutOfRange