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

如何在python中使用Selenium WebDriver拍摄部分屏幕截图?

彭华皓
2023-03-14

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

Python中有类似的解决方案吗?

共有3个答案

弘伟彦
2023-03-14

我写了这个有用的python3函数

from base64 import b64decode
from wand.image import Image
from selenium.webdriver.remote.webelement import WebElement
from selenium.webdriver.common.action_chains import ActionChains
import math

def get_element_screenshot(element: WebElement) -> bytes:
    driver = element._parent
    ActionChains(driver).move_to_element(element).perform()  # focus
    src_base64 = driver.get_screenshot_as_base64()
    scr_png = b64decode(src_base64)
    scr_img = Image(blob=scr_png)

    x = element.location["x"]
    y = element.location["y"]
    w = element.size["width"]
    h = element.size["height"]
    scr_img.crop(
        left=math.floor(x),
        top=math.floor(y),
        width=math.ceil(w),
        height=math.ceil(h),
    )
    return scr_img.make_blob()

它以字节的形式返回显示元素的png图像。限制:元素必须适合视口
您必须安装魔杖模块才能使用它。

黄查猛
2023-03-14

python3为我工作。5.

from selenium import webdriver


fox = webdriver.Firefox()
fox.get('http://stackoverflow.com/')
image = fox.find_element_by_id('hlogo').screenshot_as_png

P. S.

保存到文件

image=driver.find_element_by_id('hlogo').screenshot(output_file_path)
公良运锋
2023-03-14

除了硒,这个例子还需要PIL成像库。有时这是作为标准库之一放入的,有时不是,但如果没有,可以使用pip-install-pill

from selenium import webdriver
from PIL import Image
from io import BytesIO

fox = webdriver.Firefox()
fox.get('http://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
png = fox.get_screenshot_as_png() # saves screenshot of entire page
fox.quit()

im = Image.open(BytesIO(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

最后输出是。。。Stackoverflow标志!!!

当然,仅仅抓取一个静态图像就太过分了,但是如果你想抓取一些需要Javascript的东西,这可能是一个可行的解决方案。

 类似资料:
  • 我需要使用Sikuli的自动化,但我无法采取截图。问题是,当我点击“截屏”或“创建区域”时,IDE会被隐藏,但选择区域选项不会出现....

  • 问题内容: 是否可以使用WebDriver在框架集中拍摄仅一帧(而不是整个窗口)的屏幕截图? 或者,是否可以为屏幕截图定义窗口坐标或之后裁剪图像? 问题答案: 这应该工作:

  • 问题内容: 我正在构建一个称为“ HTML测验”的东西。它完全在JavaScript上运行,非常酷。 最后,弹出一个结果框,显示“您的结果:”,它显示了他们花费了多少时间,他们得到了多少百分比以及他们从10个问题中得出了多少个问题。我想有一个按钮,上面写着“捕获结果”,并使其以某种方式截取屏幕截图或div,然后仅在页面上显示捕获的图像即可在其中单击鼠标右键并“将图像另存为”。 我真的很想这样做,以

  • 问题内容: 我要实现的是从python中的任何网站获取网站截图。 环境:Linux 问题答案: 在Mac上,有webkit2png,在Linux+KDE上,可以使用khtml2png。我已经尝试了前者,并且效果很好,并且听说后者已投入使用。 我最近遇到了QtWebKit,它声称是跨平台的(我猜Qt将WebKit卷入了他们的库中)。但是我从未尝试过,所以我无法告诉您更多信息。 QtWebKit链接显

  • 问题内容: 我为此进行了很多搜索,但找不到解决方案。这是java中可能的解决方案的类似问题。 Python中有类似的解决方案吗? 问题答案: 除了硒以外,此示例还需要PIL映像库。有时将其作为标准库之一放入,有时却不作为,但如果没有,则可以使用 最后输出是… Stackoverflow徽标!!! 当然,现在仅获取静态图像将是过大的选择,但是如果您想要获取需要Javascript才能实现的功能,那可

  • 问题内容: 我想通过python脚本截取屏幕截图,并毫不干扰地保存它。 我只对Linux解决方案感兴趣,应该支持任何基于X的环境。 问题答案: 这无需使用scrot或ImageMagick即可工作。 从http://ubuntuforums.org/showpost.php?p=2681009&postcount=5借来的