博客
关于我
Python + selenium 如何截图?
阅读量:803 次
发布时间: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 Pyinstaller Matplotlibrary
查看>>
Python Pypi 修改 国内源(以豆瓣源为例)
查看>>
Python PyQt5 将不再显示此消息复选框添加到 QMessageBox
查看>>
Python PyQt5:如何使用 PyQt5 显示错误消息
查看>>
Python PYSFTP-以字符串/文本形式传递私钥,而不是传递文件路径
查看>>
Python pytest 面试题!
查看>>
Python pytz 时区函数返回一个相差 9 分钟的时区
查看>>
python rabbitmq实现简单/持久/广播/组播/topic/rpc消息异步发送可配置Django
查看>>
Python random和json模块
查看>>
Python random模块seed理解
查看>>
python range()函数
查看>>
Python rdflib可传递查询
查看>>
Redis 配置高可用和搭建集群
查看>>
python redis 集群_python 搭建redis集群
查看>>
python redis连接,在Python中使用Redis连接池的正确方法
查看>>
python regex_Python RegEx
查看>>
python requests post 中文结果请求得到unicode
查看>>
Python Requests接口自动化测试实战
查看>>
Python requests模块
查看>>
python request与grequests该如何选择
查看>>