Python selenium PIL 全网页滚动截屏 && headless全网页截屏

python实现滚动截屏功能 本文对应GitHub项目地址 之前写了像微信一样的区域截屏功能,中提到,我的小工具集里面有滚动截屏的功能,这篇文章将讨论一下具体的实现和公布源码。。。 实现思路类似某乎上一个关于滚动截屏实现的回答。 不同于移动端的滚动截屏,pc端浏览器之外是不能获得准确的鼠标滚动距离的(或者有我不知道的方法),要实现滚动截屏就不是那么容易了; 现在网上也有一些可以滚动截屏的软件(像FSCapture、qq截屏),... 阅读详情
  1. 思路

    ​ 先截取当前屏幕的图片,获取其高度作为base高度 h,再获取全网页body到尾部的高度 H ,循环截取图片,再通过PIL进行拼接。

  2. 代码

    # -*- coding:utf-8 -*-
    # author: donttouchkeyboard@gmail.com
    # software: PyCharm
    import os
    
    from PIL import Image
    from time import sleep
    
    
    class ScreenShot:
        __JS__ = {
            'scroll_to_bottom': "window.scroll({top:document.body.clientHeight,left:0,behavior:'auto'});",
            'scroll_to_y': "window.scroll({top:%d,left:0,behavior:'auto'});",
        }
        __base_end__ = 'tmp_end.png'
        __scroll_bottom__ = 'scroll_to_bottom'
        __scroll_y__ = 'scroll_to_y'
        __body__ = '//body'
        __height__ = 'height'
        __clear_shell__ = 'rm -rf *.png'
        __RGB__ = 'RGB'
    
        @classmethod
        def screen_shot(cls, driver, title, uploader_url='', delete=False):
            """
            全网页滚动截屏
            :param driver: webdriver 示例
            :param title: 标题(最终图片命名)
            :param uploader_url: 上传url
            :param delete: 是否清除所有图片
            :return:
            """
            base_image = '{}.png'.format(title)
            driver.save_screenshot(base_image)
            body_h = int(driver.find_element_by_xpath(cls.__body__).size.get(cls.__height__))
            current_h = Image.open(base_image).size[1] / 2
            for i in range(1, int(body_h / current_h)):
                driver.execute_script(cls.__JS__[cls.__scroll_y__] % (current_h * i))
                sleep(.5)
                driver.save_screenshot(f'tmp_{i}.png')
                cls.__join_images__(base_image, f'tmp_{i}.png', 0, base_image)
            driver.execute_script(cls.__JS__[cls.__scroll_bottom__])
            driver.save_screenshot(cls.__base_end__)
            cls.__join_images__(base_image, cls.__base_end__, int(current_h - int(body_h % current_h)), base_image)
            # TODO 上传图片
            url = ''
            # 移除图片
            if delete:
                os.system(cls.__clear_shell__)
            return url
    
        @classmethod
        def __join_images__(cls, png1, png2, size=0, output='result.png'):
            """
            图片拼接
            :param png1: 图片1
            :param png2: 图片2
            :param size: 两个图片重叠的距离
            :param output: 输出的图片文件
            :return:
            """
            size = size * 2
            img1, img2 = Image.open(png1), Image.open(png2)
            size1, size2 = img1.size, img2.size
            joint = Image.new(cls.__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)
    
    
    if __name__ == '__main__':
        from selenium import webdriver
        driver = webdriver.Chrome()
        driver.get("https://www.cnblogs.com/worldline/")
        ScreenShot.screen_shot(driver, 'worldline')
        driver.quit()
    
    
  3. 其他

    如果是在headless模式,可以使用

    
    def get_image(url, pic_name):
        """
        适用于无头全屏截图
        :param url: url访问路径
        :param pic_name: 图片名称
        :return:
        """
        chrome_options = Options()
        chrome_options.add_argument('headless')
        driver = webdriver.Chrome(options=chrome_options)
        driver.get(url)
        time.sleep(.5)
        width = driver.execute_script("return document.documentElement.scrollWidth")
        height = driver.execute_script("return document.documentElement.scrollHeight")
        print(width, height)
        driver.set_window_size(width, height)
        time.sleep(.5)
        driver.save_screenshot(pic_name)
        driver.close()
    
selenium进行网页长截图,模块长截图 selenium进行网页长截图,截图再拼接,网页截图,部件截图,模块截图 阅读详情

相关推荐

Selenium浏览器控制三要素:窗口尺寸、截图与刷新操作实战指南

在自动化测试与网页数据抓取领域,浏览器控制是核心基础。其原理在于通过程序化指令模拟用户操作,驱动浏览器执行任务,从而实现测试自动化与数据采集。这项技术的核心价值在于提升效率、确保一致性,并广泛应用于UI测试、监控报警及数据抓取等场景。本文聚焦Selenium框架中的三个关键操作:浏览器窗口尺寸设置、截图功能与页面刷新。其中,无头模式下的窗口尺寸配置是确保脚本稳定运行的前提,而滚动截图与元素精准截图则是处理复杂页面的必备技能。合理运用这些基础操作,能显著提升自动化脚本的健壮性与可靠性。

weixin_34293141的博客 664

selenium对需要滚动条滚动的元素进行截图

上次我们学习了简单的 全屏截图-->元素定位-->元素截图 。链接:https://blog.youkuaiyun.com/qq_42884600/article/details/96156268 今天又遇到了一个麻烦碰到的元素不在本页面,需要滚动条滑下去,但是滑多少也没有准确的值,因为元素的大小不一致,后来找到了一个直接将元素滑到可视区域的方法,最后被愉快的我解决了。记录一下

从测到试 3065

告别FSCapture!用Python自制轻量级滚动截屏工具(含OpenCV优化方案)

本文详细介绍了如何利用Python开发一款轻量级滚动截屏工具,以替代FSCapture等商业软件。通过模拟滚动、捕获屏幕、智能拼接等核心步骤,并结合OpenCV进行性能优化,实现了高效、可定制的长图截取方案。文章提供了完整的代码实现和优化思路,是学习Python图像处理和自动化脚本的绝佳实践。

terraform7cloud的博客 245

chatgpt赋能python:Python滚动截图:高效的网页截图工具

滚动截图是将整个网页截成多张图片并拼合成一张完整的图片。这种截图方式在显示网页的完整能力上,常被使用于网站设计,以便于演示完整的设计风格,能帮助用户在一个快速而准确的界面上获得良好的查证结果。制作滚动截图的第一步是创建截图对象,这可以使用可以使用Python的selenium库进行操作。使用Python和selenium,制作滚动截图已经变得非常简单和高效。滚动截图是一种令用户印象深刻的显示整个网站的方法,不仅可以帮助开发者快速建立优化改进,还可以为网站的展示与SEO上提供大规模的便利。

a058046的博客 700

使用python实现对元素的长截图功能

主要介绍了用python实现对元素的长截图功能,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧

TMC2209串口配置实战:从寄存器解析到电机精准控制

本文详细解析TMC2209步进电机驱动芯片的串口配置方法,从硬件连接到UART通信协议,再到核心寄存器功能详解。通过实战案例展示电流控制、微步细分和速度调节等关键配置,帮助工程师实现电机精准控制,并提供了常见故障诊断和优化技巧。

f6g7h8i9j的博客 1174

python 使用headless chrome滚动截图

from selenium import webdriver from selenium.webdriver.chrome.options import Options import util chrome_options = Options() #chrome_options.add_argument('--headless') chrome_options.add_ar...

dianyin7770的博客 559

离线安装samba与配置(.tar方式安装)

个人记录

小道士写程序 7724

Selenium实战:破解动态加载与验证码的专利数据爬虫

网络数据采集是现代数据工程中的基础技术,其核心原理是通过程序模拟浏览器行为或直接发送网络请求来获取目标信息。在应对动态渲染、复杂交互及反爬机制严格的目标网站时,传统的静态页面解析技术往往失效。Selenium作为浏览器自动化工具,其技术价值在于能够完整模拟真实用户操作,有效处理JavaScript动态加载内容,并绕过基于浏览器指纹检测的反爬策略。结合验证码识别技术,特别是通过图像预处理(如二值化、去噪)与OCR引擎(如Tesseract)的集成,可以自动化完成登录验证这一关键环节。这一技术组合在需要登录、具

weixin_30443075的博客 378

HFSS入门学习笔记——微带一分四功分器的设计与仿真

功率分配器是将输入信号功率分成相等或不相等的几路功率输出的一种多端口无源微波网络,用于功率分配和功率合成。工程上常用的微带功分器有T型功分器和威尔金森功分器。经典的威尔金森功分器有几个缺点:①、多应用于低频段,高频段时,波长会与隔离电阻的尺寸相比拟,此时需要考虑电阻的分布参数效应;②、大功率应用时,隔离电阻的耗散功率要很大,因此隔离电阻的体积也会比较大。

weixin_42126696的博客 2万+

2025虚幻游戏逆向工程解包尝试

2025虚幻游戏逆向工程解包指南 本文详细介绍了虚幻引擎5游戏逆向解包的完整流程,主要包括获取AES密钥、生成映射文件和导出资源三个关键步骤。作者在实际操作中遇到诸多难题:AES密钥获取工具存在加壳保护问题,映射文件生成器依赖复杂的VS编译环境,DLL注入工具的使用也存在技术门槛。通过多次尝试,作者发现部分游戏可直接搜索现成的AES密钥,而映射文件生成需要额外下载Memcury依赖库才能正常编译。文章提供了相关工具的下载链接和具体操作说明,但同时也指出每个环节都可能出现意外状况,逆向工程实际执行过程远比理论

wsdchong的博客 6150

AI Agent技术解析:从RPA到Energy,如何用Python构建桌面智能助手

AI Agent作为人工智能领域的重要分支,其核心在于让机器能够理解人类意图并自主执行任务。其工作原理基于大型语言模型(LLM)的自然语言理解能力,结合计算机视觉(CV)进行环境感知,通过任务规划与工具调用实现自动化操作。这项技术的价值在于将自动化从基于规则的流程驱动升级为基于目标的意图驱动,显著提升了系统的适应性和智能化水平。在应用场景上,AI Agent广泛适用于个人效率助手、软件测试、数据采集等需要人机交互的领域。本文以Energy项目为例,深入探讨了AI Agent的技术架构,并提供了使用Pytho

weixin_34416649的博客 462

YOLOv11改进有效涨点专栏目录 | 含卷积、主干、注意力机制、Neck、检测头、损失函数、二次创新C2PSA/C3k2等各种网络结构改进

Hello,各位读者们好.本文为最新YOLOv11有效涨点专栏目录,YOLOv11以及发布了一个月左右,这个过程中我也是给大家整理了许多的机制,其中包含了C3k2、主干(均支持根据yolov11训练的版本进行二次缩放,全系列都能轻量化)、检测头、注意力机制、Neck多种结构上创新,也有损失函数和一些细节点上的创新。

Snu77的博客 8万+

Selenium 截全屏

这里写自定义目录标题Selenium 截全屏结果 Selenium 截全屏 当使用Selenium进行自动化测试时,有的时候需要截取网页的全部内容,但是Selenium自带的截屏函数save_screenshot()只能截取部分图片,网上也有先滚动页面再拼接的函数,但是会有重复的部分,而且需要根据页面设置参数。下面这种方法避免了上述问题,写下来避免遗忘。 def save_fullscreenshot(driver,screen_shot_name): # We need the dimension

Dbojuedzw的博客 2464

uniapp:人脸识别功能,已测试,直接复制源码,支持H5,APP安卓。不依赖任何js,SDK。

uniapp人脸识别功能,已测试可直接复制源码,支持H5,APP安卓。不依赖任何js,SDK。 APP效果图:

sunluyi的博客 2226

图机器学习(9)——图正则化算法

网络信息能够有效约束模型行为,确保相邻节点的输出保持平滑过渡——这种特性在半监督场景中尤其重要,可实现未标注节点的信息传播。更进一步,这种机制也可用于正则化学习过程,从而提升模型在未见样本上的泛化能力。在本节中,我们探讨了在学习阶段应用正则化技术的方法,用于显著提升模型的鲁棒性,使其具备更优异的泛化能力。

盼小辉丶的博客 8960

Selenium全屏截图,使用PIL拼接滚动截图

ddd

临渊-测试开发 526

基础入门篇 | YOLOv8 项目【训练】【验证】【推理】最简单教程 | YOLOv8必看 | 最新更新,直接打印 FPS,mAP50,75,95

三个文件搞定YOLOv8【训练】【验证】【推理】🚀🚀🚀

Coding... 2万+

Selenium自动化全屏截图,使用PIL拼接滚动截图

Selenium默认的截图save_screenshot只支持对当前窗口内容进行截图,当如果你想要截取整个网页,那么,可以明确的告诉你。Selenium做不到。你可以手工使用开发者工具Ctrl+Shift+P调出命令行菜单,执行Capture full screenshot命令进行截图,如下图图:也可以通过Selenium Webdriver的 execute_cdp_cmd()来调用一下Chrome DevTools Protocal提供的方法。但是,很遗憾,没有全屏截图的方法。

测试-八戒 1218

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

python+selenium如何截图

废话不多说,直接进入正题。

yjt2045263063的博客 542

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

python pil保存图片_Python 自动控制鼠标中键滚动并截屏保存图片

功能描述:程序启动 3 秒之后自动控制鼠标滚动,使得鼠标下方的窗口自动向下滚动并对屏幕上指定区域进行截图保存为图像文件。代码:import timeimport osimport win32apiimport win32confrom PIL import ImageGrabdirectory = "captured_picture"if not os.path.exists(directory)...

weixin_39620334的博客 444

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Python脚本-实现自动截图并模拟上下翻动

【代码】Python脚本-实现自动截图并模拟上下翻动。

⭐君子以自强不息 722

chatgpt赋能python:Python实现滚动截屏

本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。🧡AI职场汇报智能办公文案写作效率提升教程 🧡专注于AI+职场+办公方向。下图是课程的整体大纲下图是AI职场汇报智能办公文案写作效率提升教程中用到的ai工具。

liangzijiaa的博客 752

python滚动截图(利用Puppeteer实现)

python滚动截图(利用Puppeteer实现)

weixin_48262500的博客 1953

Python实现屏幕滚动截图和拼接长图

董付国老师Python系列教材推荐与选用参考开学第一课:一定不要这样问老师Python问题3000道Python习题免费在线练习==============版权声明:由于公众号后台规则问题,本文暂时无法设置原创标记,但仍属原创内容,微信公众号“Python小屋”坚持只发原创技术文章。=============推荐教材:董付国编著.Python程序设计(第3版),ISBN:9787302550839...

董付国的Python专栏 968

Python 自动控制鼠标中键滚动并截屏保存图片

学Python,用RPA 艺赛旗RPA2020.1版本 正在免费下载使用中,欢迎下载使用 www.i-search.com.cn/index.html?from=line1 功能描述: 程序启动 3 秒之后自动控制鼠标滚动,使得鼠标下方的窗口自动向下滚动并对屏幕上指定区域进行截图保存为图像文件。 代码: import time import os import win32api import wi...

weixin_44447687的博客 487
上一篇: JVM监控性能调优GUI篇(二)- Visual VM
下一篇: 通俗易懂的UML类图
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值