Selenium基于PIL实现拼接滚动截图

 更新时间:2020年04月10日 11:23:00   作者:临渊  
这篇文章主要介绍了Selenium基于PIL实现拼接滚动截图,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

Selenium默认的截图save_screenshot只支持对当前窗口内容进行截图,当如果你想要截取整个网页,那么,可以明确的告诉你。
Selenium做不到。

你可以手工使用开发者工具Ctrl+Shift+P调出命令行菜单,执行Capture full screenshot命令进行截图,如下图图:

也可以通过

Selenium Webdriver的 execute_cdp_cmd()来调用一下Chrome DevTools Protocal提供的方法。但是,很遗憾,没有全屏截图的方法。

Selenium2时,还可以使用Firefox全屏截图。Selenium3之后,所有浏览器不再支持。

一种方式是使用aShot,一个jar包,这显然是Java派的解决方案。

另外如果对样式没有强迫症的话,可以通过滚动页面截取多张+PIL图片拼接的方式实现全屏的截图。

示例代码:

from time import sleep
from PIL import Image
import numpy as np
from selenium import webdriver

driver = webdriver.Chrome()
driver.fullscreen_window() # 全屏窗口
driver.get('https://www.qq.com/')
window_height = driver.get_window_size()['height'] # 窗口高度

page_height = driver.execute_script('return document.documentElement.scrollHeight') # 页面高度
driver.save_screenshot('qq.png')

if page_height > window_height:
  n = page_height // window_height # 需要滚动的次数
  base_mat = np.atleast_2d(Image.open('qq.png')) # 打开截图并转为二维矩阵

  for i in range(n):
    driver.execute_script(f'document.documentElement.scrollTop={window_height*(i+1)};')
    sleep(.5)
    driver.save_screenshot(f'qq_{i}.png') # 保存截图
    mat = np.atleast_2d(Image.open(f'qq_{i}.png')) # 打开截图并转为二维矩阵
    base_mat = np.append(base_mat, mat, axis=0) # 拼接图片的二维矩阵
  Image.fromarray(base_mat).save('hao123.png')

driver.quit()

需要安装PIL和numpy: pip install PIL numpy

上例中,全屏窗口以获得最大展示范围,通过get_window_size()获取屏幕高度,通过执行js,获取页面高度。
相除后获得滚动次数。

每次滚动后,截图保存,然后使用Image打开转换为二维矩阵拼接到上一个图片的二维矩阵中。

循环完,最后再将拼接的二维矩阵输出成图片。

效果展示,如下图:

注意:如果是流式加载的页面,页面高度是不断变长的,非固定为第一次获取到的page_height的值,需要另外处理

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 解决django前后端分离csrf验证的问题

    解决django前后端分离csrf验证的问题

    今天小编就为大家分享一篇解决django前后端分离csrf验证的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-02-02
  • pycharm上的python虚拟环境移到离线机器上的方法步骤

    pycharm上的python虚拟环境移到离线机器上的方法步骤

    本人在工作中需要在离线Windows环境中使用,本文主要介绍了pycharm上的python虚拟环境移到离线机器上的方法步骤,具有一定的参考价值,感兴趣的可以了解一下
    2021-10-10
  • 基于Python编写一个学生姓名比较工具

    基于Python编写一个学生姓名比较工具

    这篇文章主要为大家详细介绍了如何使用Python Tkinter编写一个学生姓名比较工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-10-10
  • PyTorch 使用torchvision进行图片数据增广

    PyTorch 使用torchvision进行图片数据增广

    本文主要介绍了PyTorch 使用torchvision进行图片数据增广,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • python中struct模块之字节型数据的处理方法

    python中struct模块之字节型数据的处理方法

    今天小编就为大家分享一篇python中struct模块之字节型数据的处理方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • OpenCV python sklearn随机超参数搜索的实现

    OpenCV python sklearn随机超参数搜索的实现

    这篇文章主要介绍了OpenCV python sklearn随机超参数搜索的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • Django发送html邮件的方法

    Django发送html邮件的方法

    这篇文章主要介绍了Django发送html邮件的方法,涉及Django框架操作邮件的相关技巧,需要的朋友可以参考下
    2015-05-05
  • python制作机器人的实现方法

    python制作机器人的实现方法

    机器人自动回复在很多场景中都可以用的上,本文主要介绍了python制作机器人的实现方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • Python使用pip工具实现包自动更新的多种方法

    Python使用pip工具实现包自动更新的多种方法

    本文深入探讨了使用Python的pip工具实现包自动更新的各种方法和技术,我们将从基础概念开始,逐步介绍手动更新方法、自动化脚本编写、结合CI/CD的实现方案,以及最佳实践和安全考量,文章包含详细的代码示例、流程图解和实际应用场景分析,需要的朋友可以参考下
    2025-07-07
  • Python标准库shutil用法实例详解

    Python标准库shutil用法实例详解

    这篇文章主要介绍了Python标准库shutil用法,结合实例形式分析了shutil库针对文件与文件夹各种常见操作技巧与相关使用注意事项,需要的朋友可以参考下
    2018-08-08

最新评论