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

selenium无法截屏web元素

云鸿达
2023-03-14

我可以用Firefox截屏整个页面。以文件('2.png')的形式获取屏幕截图,但当我使用段落截图一个web元素时。屏幕截图('1.png'),它总是引发这个异常:

selenium.common.exceptions.WebDriverException: Message: Unrecognized command: GET /session/284283fa-53fc-4b33-b329-e6e888dbdcb0/screenshot/{35834cf1-c9c7-4129-99b1-24f30c6b56e6}

共有2个答案

姜磊
2023-03-14

Firefox驱动程序中没有实现web元素的屏幕截图。解决方法是从截图中裁剪目标元素:

import StringIO
from selenium import webdriver
from PIL import Image

driver = webdriver.Firefox()
driver.get('http://stackoverflow.com')

# get the logo element
element = driver.find_element_by_id('hlogo')

# crop to the logo from the screenshot
rect = element.rect
points = [rect['x'], rect['y'], rect['x'] + rect['width'], rect['y'] + rect['height']]
with Image.open(StringIO.StringIO(driver.get_screenshot_as_png())) as img :
    with img.crop(points) as imgsub :
        imgsub.save("c:\\temp\\logo.png", 'PNG')
慕宏博
2023-03-14

你得到了这个异常,因为你不能只截取selenium中的一个元素的屏幕截图,而没有一些第三方库或你自己的代码来处理这个问题。查看此stackoverflow帖子

它使用一个名为PIL的库来实现:

from selenium import webdriver
from PIL import Image

fox = webdriver.Firefox()
fox.get('https://stackoverflow.com/')

# now that we have the preliminary stuff out of the way time to get that image :D
element = fox.find_element_by_id('hlogo') # find part of the page you want image of
location = element.location
size = element.size
fox.save_screenshot('screenshot.png') # saves screenshot of entire page
fox.quit()

im = Image.open('screenshot.png') # uses PIL library to open image in memory

left = location['x']
top = location['y']
right = location['x'] + size['width']
bottom = location['y'] + size['height']


im = im.crop((left, top, right, bottom)) # defines crop points
im.save('screenshot.png') # saves new cropped image
 类似资料:
  • 问题内容: 我可以使用Firefox.get_screenshot_as_file(‘2.png’)对整个页面进行屏幕截图,但是当我使用pass.screenshot(‘1.png’)对网络元素进行屏幕截图时,总是会引发以下异常: 问题答案: 之所以会出现此异常,是因为如果没有某些第三方库或您自己的代码来处理硒中的元素,就无法截取它的屏幕快照。 它使用称为PIL的库来执行此操作:

  • 当我运行上面的代码时,我得到了错误,我的python版本是2.7。硒含量为3.1 代码错误 [0315/220804.111:ERROR:angle_platform_impl.cc(33)]angle Display::initialize err或5:DXGI 1.2需要显示给另一个进程拥有的HWNDs。[0315/220804.111:错误:gl\u surface\u egl.cc(646

  • 我只需要当前视口的屏幕截图,特别是滚动位置。基本上是当前Chrome驱动程序所做的。 据我所知,这似乎是完全可能的,但出于某种原因,屏幕截图命令总是努力拍摄完整的文档屏幕截图。事实上,IE驱动程序拍摄多个视口快照,然后将它们缝合在一起。 我使用的是Ruby webdriver,但我看不到任何东西,只能截取视口的屏幕。可能吗?

  • 我对硒很陌生。 我尝试构建一个测试来验证网页元素(小图标)是否显示在页面上。 因此,在我的类的顶部,我通过xpath定义了Web元素。 Xpath我在应用右键单击元素并单击检查后从检查中复制。 @通过(xpath=“//*[@id=”referrals“]/tbody/tr[2]/td[2]/div/img[2]”)私有WebElement链和twoarrowsicon查找; 然后在同一个类中,我

  • 我试着用java selenium web驱动程序中的TakeScreenshot来截屏。当我在页面中使用scrollTo(x, y)滚动特定数量时,TakeScreenshot方法会给我屏幕截图第一个视口,而不是滚动后到达的视口。 我想知道TakeScreenshot方法是给出OperaWebDriver中第一个视口的屏幕截图还是当前视口的屏幕截图。在chrome中,它拍摄了当前网络驱动程序的屏