博客
关于我
Python + selenium 如何截图?
阅读量:799 次
发布时间:2023-03-05

本文共 3534 字,大约阅读时间需要 11 分钟。

Selenium 截取网页元素的多种方法

在软件测试和自动化测试领域,截取网页截图是一个常用的操作。以下是几种常见的截图方法,帮助你快速掌握取控。

一、直接截取网页全屏

在 Selenium 中截取网页全屏,可以使用内置的 save_screenshot 方法。以下是示例代码:

from selenium import webdriverfrom time import sleepclass test:    def test_case():        driver = webdriver.Chrome()        driver.maximize_window()        driver.get('https://www.baidu.com/')        sleep(2)        driver.save_screenshot("demo1.png")

运行代码后,demo1.png 文件中会保存当前网页的全屏截图。

二、截取页面上固定元素的图片

如果你需要截取特定元素的图片,可以使用 find_element_by_id 等定位方法,结合 screenshot 方法。以百度首页的“百度一下”按钮为例:

from selenium import webdriverfrom time import sleepclass test:    def test_case():        driver = webdriver.Chrome()        driver.maximize_window()        driver.get('https://www.baidu.com/')        sleep(2)        element = driver.find_element_by_id("su")        element.screenshot("element.png")        driver.quit()

运行后,element.png 中会显示“百度一下”按钮的截图。

三、截取指定位置的图片

有时候你需要截取特定位置的内容,可以通过获取元素坐标来实现。以下是截取百度搜索框的示例:

from selenium import webdriverfrom time import sleepfrom PIL import Imageclass test:    def test_case():        driver = webdriver.Chrome()        driver.maximize_window()        driver.get('https://www.baidu.com/')        sleep(2)        element = driver.find_element_by_id("kw")        print("获取元素的坐标")        location = element.location        print(location)        print(element.size)                top = element.location['y']        bottom = element.location['y'] + element.size['height']        left = element.location['x']        right = element.location['x'] + element.size['width']        print(top, bottom, left, right)                im = Image.open('baidu1.png')        im = im.crop((left, top, right, bottom))        im.show()        im.save("baidu2.png")        driver.quit()

运行后,baidu2.png 中会显示截取的搜索框及其周围内容。

四、图片拼接

如果需要将多张图片拼接成一张大图,可以使用 Python 的 PIL 库。以下是基于 Selenium 截取的图片拼接方法:

from selenium import webdriverfrom PIL import Imageclass test:    def test_case():        driver = webdriver.Chrome()        driver.maximize_window()        driver.get('https://www.csdn.net/')                def join_images(png1, png2, size=0, output='result.png'):            """图片拼接            :param png1: 图片1            :param png2: 图片2            :param size: 两个图片重叠的距离            :param output: 输出的图片文件            :return:            """            img1 = Image.open(png1)            img2 = Image.open(png2)            size1 = img1.size            size2 = img2.size                        joint = Image.new('RGB', (size1[0], size1[1] + size2[1] - size))            loc1 = (0, 0)            loc2 = (0, size1[1] - size)            joint.paste(img1, loc1)            joint.paste(img2, loc2)            joint.save(output)                    # 截取当前页面        driver.save_screenshot('result.png')                # 拼接多张图(示例)        body_h = int(driver.find_element_by_xpath('//body').size.get('height'))        current_h = Image.open('result.png').size[1]        image_list = ['result.png']                for i in range(1, int(body_h / current_h)):            driver.execute_script(f"window.scroll({top: {current_h * i}}, left: 0, behavior: 'auto'});")            driver.save_screenshot(f'test_{i}.png')            join_images('result.png', f'test_{i}.png')                # 处理最后一张图        driver.execute_script("window.scroll({top: {body_h}, left: 0, behavior: 'auto'});")        driver.save_screenshot('test_end.png')        join_images('result.png', 'test_end.png', size=current_h - int(body_h % current_h))                driver.quit()

运行代码后,result.png 中会显示拼接后的完整图像。

通过以上方法,你可以根据需求灵活截取网页内容,满足不同测试场景的需求。

转载地址:http://diafk.baihongyu.com/

你可能感兴趣的文章
pynput的基本介绍和使用
查看>>
pyodbc 通过 IIS7 连接到 MSSQL 2005 服务器
查看>>
PyPI 存储库中的 JarkaStealer:深入解析与防范措施
查看>>
Pyplot tutorial,Pyplot官方教程自翻译
查看>>
PyQ5学习笔记——使用内部槽函数关闭窗口
查看>>
PyQ5学习笔记——使用自定义槽函数关闭窗口
查看>>
PyQt MimeData 文件名
查看>>
PyQt QML Material Design 按钮背景不会改变
查看>>
PyQt QString转成python stirng
查看>>
PyQt QToolButton在焦点时不更新图标
查看>>
PyQt 正确使用 emit() 和 pyqtSignal()
查看>>
PyQT-将文件复制到剪贴板
查看>>
PYQT.如何在QTableView中插入小部件
查看>>
PyQt4 代码在 PyQt5 (QHeaderView) 上不起作用
查看>>
PyQt4 到 PyQt5 ->mainFrame() 已弃用,需要修复才能加载网页
查看>>
PyQt4, class:mouseButtons用法
查看>>
PyQt4参考文档
查看>>
PyTorch Lightning:通过分布式训练扩展深度学习工作流
查看>>
PyQt5 - QThread:在线程仍在运行时被销毁
查看>>
PyQt5 - 如何从工作线程发出信号以通过 GUI 线程调用事件
查看>>