-
思路
先截取当前屏幕的图片,获取其高度作为base高度 h,再获取全网页body到尾部的高度 H ,循环截取图片,再通过PIL进行拼接。
-
代码
# -*- 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() -
其他
如果是在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浏览器控制三要素:窗口尺寸、截图与刷新操作实战指南
在自动化测试与网页数据抓取领域,浏览器控制是核心基础。其原理在于通过程序化指令模拟用户操作,驱动浏览器执行任务,从而实现测试自动化与数据采集。这项技术的核心价值在于提升效率、确保一致性,并广泛应用于UI测试、监控报警及数据抓取等场景。本文聚焦Selenium框架中的三个关键操作:浏览器窗口尺寸设置、截图功能与页面刷新。其中,无头模式下的窗口尺寸配置是确保脚本稳定运行的前提,而滚动截图与元素精准截图则是处理复杂页面的必备技能。合理运用这些基础操作,能显著提升自动化脚本的健壮性与可靠性。
selenium对需要滚动条滚动的元素进行截图
上次我们学习了简单的 全屏截图-->元素定位-->元素截图 。链接:https://blog.youkuaiyun.com/qq_42884600/article/details/96156268 今天又遇到了一个麻烦碰到的元素不在本页面,需要滚动条滑下去,但是滑多少也没有准确的值,因为元素的大小不一致,后来找到了一个直接将元素滑到可视区域的方法,最后被愉快的我解决了。记录一下
告别FSCapture!用Python自制轻量级滚动截屏工具(含OpenCV优化方案)
本文详细介绍了如何利用Python开发一款轻量级滚动截屏工具,以替代FSCapture等商业软件。通过模拟滚动、捕获屏幕、智能拼接等核心步骤,并结合OpenCV进行性能优化,实现了高效、可定制的长图截取方案。文章提供了完整的代码实现和优化思路,是学习Python图像处理和自动化脚本的绝佳实践。
chatgpt赋能python:Python滚动截图:高效的网页截图工具
滚动截图是将整个网页截成多张图片并拼合成一张完整的图片。这种截图方式在显示网页的完整能力上,常被使用于网站设计,以便于演示完整的设计风格,能帮助用户在一个快速而准确的界面上获得良好的查证结果。制作滚动截图的第一步是创建截图对象,这可以使用可以使用Python的selenium库进行操作。使用Python和selenium,制作滚动截图已经变得非常简单和高效。滚动截图是一种令用户印象深刻的显示整个网站的方法,不仅可以帮助开发者快速建立优化改进,还可以为网站的展示与SEO上提供大规模的便利。
使用python实现对元素的长截图功能
主要介绍了用python实现对元素的长截图功能,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧
TMC2209串口配置实战:从寄存器解析到电机精准控制
本文详细解析TMC2209步进电机驱动芯片的串口配置方法,从硬件连接到UART通信协议,再到核心寄存器功能详解。通过实战案例展示电流控制、微步细分和速度调节等关键配置,帮助工程师实现电机精准控制,并提供了常见故障诊断和优化技巧。
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...
离线安装samba与配置(.tar方式安装)
个人记录
Selenium实战:破解动态加载与验证码的专利数据爬虫
网络数据采集是现代数据工程中的基础技术,其核心原理是通过程序模拟浏览器行为或直接发送网络请求来获取目标信息。在应对动态渲染、复杂交互及反爬机制严格的目标网站时,传统的静态页面解析技术往往失效。Selenium作为浏览器自动化工具,其技术价值在于能够完整模拟真实用户操作,有效处理JavaScript动态加载内容,并绕过基于浏览器指纹检测的反爬策略。结合验证码识别技术,特别是通过图像预处理(如二值化、去噪)与OCR引擎(如Tesseract)的集成,可以自动化完成登录验证这一关键环节。这一技术组合在需要登录、具
HFSS入门学习笔记——微带一分四功分器的设计与仿真
功率分配器是将输入信号功率分成相等或不相等的几路功率输出的一种多端口无源微波网络,用于功率分配和功率合成。工程上常用的微带功分器有T型功分器和威尔金森功分器。经典的威尔金森功分器有几个缺点:①、多应用于低频段,高频段时,波长会与隔离电阻的尺寸相比拟,此时需要考虑电阻的分布参数效应;②、大功率应用时,隔离电阻的耗散功率要很大,因此隔离电阻的体积也会比较大。
2025虚幻游戏逆向工程解包尝试
2025虚幻游戏逆向工程解包指南 本文详细介绍了虚幻引擎5游戏逆向解包的完整流程,主要包括获取AES密钥、生成映射文件和导出资源三个关键步骤。作者在实际操作中遇到诸多难题:AES密钥获取工具存在加壳保护问题,映射文件生成器依赖复杂的VS编译环境,DLL注入工具的使用也存在技术门槛。通过多次尝试,作者发现部分游戏可直接搜索现成的AES密钥,而映射文件生成需要额外下载Memcury依赖库才能正常编译。文章提供了相关工具的下载链接和具体操作说明,但同时也指出每个环节都可能出现意外状况,逆向工程实际执行过程远比理论
AI Agent技术解析:从RPA到Energy,如何用Python构建桌面智能助手
AI Agent作为人工智能领域的重要分支,其核心在于让机器能够理解人类意图并自主执行任务。其工作原理基于大型语言模型(LLM)的自然语言理解能力,结合计算机视觉(CV)进行环境感知,通过任务规划与工具调用实现自动化操作。这项技术的价值在于将自动化从基于规则的流程驱动升级为基于目标的意图驱动,显著提升了系统的适应性和智能化水平。在应用场景上,AI Agent广泛适用于个人效率助手、软件测试、数据采集等需要人机交互的领域。本文以Energy项目为例,深入探讨了AI Agent的技术架构,并提供了使用Pytho
YOLOv11改进有效涨点专栏目录 | 含卷积、主干、注意力机制、Neck、检测头、损失函数、二次创新C2PSA/C3k2等各种网络结构改进
Hello,各位读者们好.本文为最新YOLOv11有效涨点专栏目录,YOLOv11以及发布了一个月左右,这个过程中我也是给大家整理了许多的机制,其中包含了C3k2、主干(均支持根据yolov11训练的版本进行二次缩放,全系列都能轻量化)、检测头、注意力机制、Neck多种结构上创新,也有损失函数和一些细节点上的创新。
Selenium 截全屏
这里写自定义目录标题Selenium 截全屏结果 Selenium 截全屏 当使用Selenium进行自动化测试时,有的时候需要截取网页的全部内容,但是Selenium自带的截屏函数save_screenshot()只能截取部分图片,网上也有先滚动页面再拼接的函数,但是会有重复的部分,而且需要根据页面设置参数。下面这种方法避免了上述问题,写下来避免遗忘。 def save_fullscreenshot(driver,screen_shot_name): # We need the dimension
uniapp:人脸识别功能,已测试,直接复制源码,支持H5,APP安卓。不依赖任何js,SDK。
uniapp人脸识别功能,已测试可直接复制源码,支持H5,APP安卓。不依赖任何js,SDK。 APP效果图:
图机器学习(9)——图正则化算法
网络信息能够有效约束模型行为,确保相邻节点的输出保持平滑过渡——这种特性在半监督场景中尤其重要,可实现未标注节点的信息传播。更进一步,这种机制也可用于正则化学习过程,从而提升模型在未见样本上的泛化能力。在本节中,我们探讨了在学习阶段应用正则化技术的方法,用于显著提升模型的鲁棒性,使其具备更优异的泛化能力。
Selenium全屏截图,使用PIL拼接滚动截图
ddd
基础入门篇 | YOLOv8 项目【训练】【验证】【推理】最简单教程 | YOLOv8必看 | 最新更新,直接打印 FPS,mAP50,75,95
三个文件搞定YOLOv8【训练】【验证】【推理】🚀🚀🚀
Selenium自动化全屏截图,使用PIL拼接滚动截图
Selenium默认的截图save_screenshot只支持对当前窗口内容进行截图,当如果你想要截取整个网页,那么,可以明确的告诉你。Selenium做不到。你可以手工使用开发者工具Ctrl+Shift+P调出命令行菜单,执行Capture full screenshot命令进行截图,如下图图:也可以通过Selenium Webdriver的 execute_cdp_cmd()来调用一下Chrome DevTools Protocal提供的方法。但是,很遗憾,没有全屏截图的方法。
华为的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如何截图
废话不多说,直接进入正题。
OV9734 DATASHEET,完整规格书
OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等
python pil保存图片_Python 自动控制鼠标中键滚动并截屏保存图片
功能描述:程序启动 3 秒之后自动控制鼠标滚动,使得鼠标下方的窗口自动向下滚动并对屏幕上指定区域进行截图保存为图像文件。代码:import timeimport osimport win32apiimport win32confrom PIL import ImageGrabdirectory = "captured_picture"if not os.path.exists(directory)...
jre9下载 jdk9
(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】
Python脚本-实现自动截图并模拟上下翻动
【代码】Python脚本-实现自动截图并模拟上下翻动。
chatgpt赋能python:Python实现滚动截屏
本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。🧡AI职场汇报智能办公文案写作效率提升教程 🧡专注于AI+职场+办公方向。下图是课程的整体大纲下图是AI职场汇报智能办公文案写作效率提升教程中用到的ai工具。
python滚动截图(利用Puppeteer实现)
python滚动截图(利用Puppeteer实现)
Python实现屏幕滚动截图和拼接长图
董付国老师Python系列教材推荐与选用参考开学第一课:一定不要这样问老师Python问题3000道Python习题免费在线练习==============版权声明:由于公众号后台规则问题,本文暂时无法设置原创标记,但仍属原创内容,微信公众号“Python小屋”坚持只发原创技术文章。=============推荐教材:董付国编著.Python程序设计(第3版),ISBN:9787302550839...
Python 自动控制鼠标中键滚动并截屏保存图片
学Python,用RPA 艺赛旗RPA2020.1版本 正在免费下载使用中,欢迎下载使用 www.i-search.com.cn/index.html?from=line1 功能描述: 程序启动 3 秒之后自动控制鼠标滚动,使得鼠标下方的窗口自动向下滚动并对屏幕上指定区域进行截图保存为图像文件。 代码: import time import os import win32api import wi...
664



被折叠的 条评论
为什么被折叠?



