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

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

Selenium 截图实用技巧

一、直接截取网页全屏

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

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

运行后,打开 demo1.png 文件即可看到完整的网页截图。

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

以百度首页的“百度一下”按钮为例,使用 ID 定位的方法截图特定元素:

from selenium import webdriverfrom time import sleepclass test:    def test_method():        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 文件即可看到“百度一下”按钮的截图。

三、截取指定位置的图片

为了截取特定位置的图片,可以使用 Selenium 获取元素的坐标,并结合 Pillow 库进行截图处理:

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

运行后,打开 baidu2.png 文件即可看到截取的特定区域图片。

四、图片拼接

通过 Selenium 和 Pillow 库实现多张图片的拼接。以下是实现代码:

from selenium import webdriverfrom PIL import Imagedriver = 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, loc2 = (0, 0), (0, size1[1] - size)    joint.paste(img1, loc1)    joint.paste(img2, loc2)    joint.save(output)JS = {    '滚动到页尾': "window.scroll({top:document.body.clientHeight,left:0,behavior:'auto'});",    '滚动到': "window.scroll({top:%d,left:0,behavior:'auto'});",}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(JS['滚动到'] % (current_h * i))    driver.save_screenshot(f'test_{i}.png')    join_images('result.png', f'test_{i}.png')driver.execute_script(JS['滚动到页尾'])driver.save_screenshot('test_end.png')join_images('result.png', 'test_end.png', size=current_h - int(body_h % current_h))

运行后,打开 result.png 文件即可看到拼接后的完整图片。

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

你可能感兴趣的文章
Pyinstaller和海运
查看>>
PyInstaller图标选项在Mac上不起作用
查看>>
pyinstaller的使用
查看>>
pyinstaller超级加密 (加壳和转c)
查看>>
pyinstaller错误:OSError:找不到Python库:libpython3.4mu.so.1.0、libpython3.4m.so.1.0、libpython3.4.so.1.0
查看>>
Pyinstaller:‘;Fiona‘;没有属性‘;_loading‘;(很可能是由于循环导入)
查看>>
pyinstaller:更改应用程序图标
查看>>
Pylint“未解决的导入“;Visual Studio 代码中的错误
查看>>
pyLoad远程代码执行漏洞复现(CVE-2023-0297)
查看>>
pymongo update_one(),upsert=True,不使用$运算符
查看>>
pymongo 中的快速或批量更新
查看>>
pymongo删除操作
查看>>
PyMongo按多个关键点分组
查看>>
Pympress:强大的双屏PDF阅读器
查看>>
pymysql.err.InternalError: (1054, "Unknown column '27D24A3B' in 'where clause'")之错误解决
查看>>
pymysql.err.OperationalError: (1364, “Field ‘id‘ doesn‘t have a default value“)
查看>>
Pytorch Tensor 维度操作的形象理解 Tensor.unsqueeze() Tensor.squeeze()
查看>>
PyMySQL库对Mysql数据库进行增删改查与工具类封装
查看>>
pynput的基本介绍和使用
查看>>
pyodbc 通过 IIS7 连接到 MSSQL 2005 服务器
查看>>