当前位置: 首页 > 知识库问答 >
问题:

如何使用Python在Selenium中截屏指定的WebElement

许高峻
2023-03-14

我想截屏Selenium中的一个元素,根据文档,每个WebElement都有一个功能:

截图(文件名)

将当前元素的屏幕截图保存到PNG图像文件。如果有任何IOError,则返回False,否则返回True。在文件名中使用完整路径。

Args:filename:您希望将屏幕截图保存到的完整路径。这应该以一个简单的结尾。png扩展

用法:元素。截图(“/Screenshots/foo.png”)

但是,当我在程序中使用此功能时:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from time import sleep


url='http://www.google.com'
browser = webdriver.Chrome()  
browser.get(url)
content = browser.find_element_by_id('searchform')
content.screenshot('/home/ding/Pictures/shot.png')

它会引发如下错误:

Traceback (most recent call last):

  File "<ipython-input-8-309cb404878d>", line 11, in <module>
    content.screenshot('/home/ding/Pictures/shot.png')

  File "/home/ding/anaconda3/lib/python3.6/site-packages/selenium/webdriver/remote/webelement.py", line 453, in screenshot
    png = self.screenshot_as_png

  File "/home/ding/anaconda3/lib/python3.6/site-packages/selenium/webdriver/remote/webelement.py", line 435, in screenshot_as_png
    return base64.b64decode(self.screenshot_as_base64.encode('ascii'))

  File "/home/ding/anaconda3/lib/python3.6/site-packages/selenium/webdriver/remote/webelement.py", line 425, in screenshot_as_base64
    return self._execute(Command.ELEMENT_SCREENSHOT)['value']

  File "/home/ding/anaconda3/lib/python3.6/site-packages/selenium/webdriver/remote/webelement.py", line 501, in _execute
    return self._parent.execute(command, params)

  File "/home/ding/anaconda3/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 308, in execute
    self.error_handler.check_response(response)

  File "/home/ding/anaconda3/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 165, in check_response
    raise exception_class(value)

WebDriverException: unknown command: session/efbca24571c5332230f4d032ae04787c/element/0.7487814861441955-1/screenshot

如何解决这个问题,并在Python中使用Selenium拍摄元素的屏幕截图?

共有3个答案

昌乐
2023-03-14

导入其他库来编写文件在我看来很愚蠢。。。

使用内置的open

button_element = self._driver.find_element_by_class_name("a-button-input")
with open("element.png", "wb") as elem_file:
    elem_file.write(button_element.screenshot_as_png)

亚马逊元素输出:

牟波
2023-03-14

你需要用save_screenshot方法替换screenshot。所以

而不是:

content.screenshot('/home/ding/Pictures/shot.png')

使用:

content.save_screenshot('/home/ding/Pictures/shot.png')
毋宪
2023-03-14

这段代码非常适合在火狐浏览器中截取特定元素的屏幕截图。

from selenium import webdriver
import io
from PIL import Image

fox = webdriver.Firefox()
fox.get('http://stackoverflow.com/')
image = fox.find_element_by_id('hlogo').screenshot_as_png
imageStream = io.BytesIO(image)
im = Image.open(imageStream)
im.save(image_path)
 类似资料:
  • 问题内容: 我为此进行了很多搜索,但找不到解决方案。这是java中可能的解决方案的类似问题。 Python中有类似的解决方案吗? 问题答案: 除了硒以外,此示例还需要PIL映像库。有时将其作为标准库之一放入,有时却不作为,但如果没有,则可以使用 最后输出是… Stackoverflow徽标!!! 当然,现在仅获取静态图像将是过大的选择,但是如果您想要获取需要Javascript才能实现的功能,那可

  • 问题内容: 有谁知道是否可以使用Selenium WebDriver截屏?(注:不是seleniumRC) 问题答案: 是的,有可能。以下示例是Java语言:

  • 我找了很多,但找不到解决办法。这里有一个类似的问题,在java中有一个可能的解决方案。 Python中有类似的解决方案吗?

  • 问题内容: 我有一个用Java编写的小项目,我需要用C#重写它。 差不多完成了,但是我仍然坚持使用Selenium Webdriver获取element的屏幕截图。我是通过Java用以下方式完成的: 它在Java中完美地工作,但是我不知道如何用C#重写它,因为我不太熟悉它。 有人可以提出一些不错的方法来在C#中实现相同的目的吗? 问题答案: 在这里,我编写了一些代码以使用C#拍摄Element的屏

  • 本文向大家介绍如何使用python写截屏小工具,包括了如何使用python写截屏小工具的使用技巧和注意事项,需要的朋友参考一下 前言 今天我看了一下自己的文件夹,发现了自己写了许多似乎很无聊的代码。于是乎,一个想法油然而生:“生活已经很无聊了,不如再无聊一点叭”。 说干就干,那就开一个专题,我们称之为kimol君的无聊小发明。 妙…啊~~~ 今天要做的东西,就是用python写一个截屏工具。想必大

  • 问题内容: 如何设置Selenium与Python一起使用?我只想用Python编写/导出脚本,然后运行它们。是否有任何资源?我尝试使用谷歌搜索,但是发现的东西要么是指Selenium(RC)的过时版本,要么是Python的过时版本。 问题答案: 您是说Selenium WebDriver吗?… 先决条件 :根据您的操作系统安装Python 使用以下命令安装 并在您的代码中使用此模块 您还可以根据