博客
关于我
Python + selenium 如何截图?
阅读量:806 次
发布时间: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/

你可能感兴趣的文章
python | 一文看懂Python闭包机制与变量作用域规则
查看>>
python读取含中文的json
查看>>
python | 如何用Python锁避免并发错误?
查看>>
python | 提升代码迭代速度的Python重载方法
查看>>
python | 深入理解Python并发编程中的GIL限制与解决方案
查看>>
Python | 爬虫实战——亚马逊搜索页监控(附详细源码)
查看>>
python | 高效使用Python工具自动生成模块文档的秘诀
查看>>
python 一个list去除另一个list中的值
查看>>
python 三大框架的 介绍。
查看>>
Python 下载的 11 种姿势,一种比一种高级!
查看>>
python读取一个文件夹下所有图片_初学Python-找出文件夹下的所有图片
查看>>
Python 中 3 个不可思议的返回功能
查看>>
python 中 dict 的另一种用法
查看>>
Python 中 PIL 读取图片出现异常旋转的解决方法
查看>>
python读取word表格内容(1)
查看>>
python 中os.path.join 双斜杠的解决办法
查看>>
python 中PIL.Image和OpenCV图像格式相互转换
查看>>
Python 中Semaphore 信号量对象、Event事件、Condition
查看>>
python 中with的使用及样例
查看>>
python读取wav文件并播放[pyaudio/wave]
查看>>