Selenium截屏和录屏
Selenium网页截图的四种方法
1. driver.get_screenshot_as_base64():
用途:获取截屏的base64编码数据,在HTML界面输出截图时使用。
用法:

2. driver.get_screenshot_as_png():
用途:获取获取二进制数据流
用法:

3. driver.save_screenshot(filename/full_path):
用途:获取截屏png图片,参数是文件名称,截屏必须是.png图片, 如果只给文件名,截图会保存在项目的根目录下面。
用法:

4. driver.get_screenshot_as_file(filename/full_path):
用途:获取截屏png图片,参数是文件的绝对路径,截屏必须是.png图片。如果只给文件名,截屏会存在项目的根目录下。
用法:

Selenium录屏
实现方法是在Selenium操作时,另外启动一个线程,不断截图,最后将图片拼接成git。
操作方法如下:
1.编写一个循环截图函数shot
由于webdriver接口执行截图命令的速度限制,每一轮截图无需再sleep。
2. 操作web时,启动一个线程
img_dir = 'img' # 临时图片目录 dr = webdriver.Chrome() t = threading.Thread(target=shot, args=(dr, img_dir)) # 新建线程 t.start() # 启动截图线程 dr.get('https://www.baidu.com') dr.find_element('id', 'kw').send_keys('简书 韩志超') dr.find_element('id', 'su').click() time.sleep(1) dr.get('https://www.qq.com') dr.back() time.sleep(2) dr.quit()
3.图片拼接成gif
需要安装pillow:
pip install pillow
img_list = os.listdir(img_dir) # 列出目录所有图片 img_list.sort(key=lambda x: int(x[:-4])) # 排序 first_img = Image.open(os.path.join(img_dir, img_list[0])) # 第一张图片对象 else_imgs = [Image.open(os.path.join(img_dir, img)) for img in img_list[1:]] # 剩余图片对象 first_img.save("record.gif", append_images=else_imgs, duration=300, save_all=True) # 拼接保存
from selenium import webdriver import threading import os import time from PIL import Image def clear_dir(path): """创建或清空目录""" if not os.path.isdir(path): os.mkdir(path) # 创建目录 else: # 清空目录 [os.remove(os.path.join(path, file_name)) for file_name in os.listdir(path)] def shot(dr, img_dir): """循环截图函数""" i = 0 clear_dir(img_dir) # 清空目录 while True: img_file = os.path.join(img_dir, f'{i}.png') try: dr.save_screenshot(img_file) except: return i += 1 # Selenium操作 img_dir = 'img' # 临时图片目录 dr = webdriver.Chrome() t = threading.Thread(target=shot, args=(dr, img_dir)) # 新建线程 t.start() # 启动截图线程 dr.get('https://www.baidu.com') dr.find_element('id', 'kw').send_keys('简书 韩志超') dr.find_element('id', 'su').click() time.sleep(1) dr.get('https://www.qq.com') dr.back() time.sleep(2) dr.quit() # 图片拼接成gif img_list = os.listdir(img_dir) # 列出目录所有图片 img_list.sort(key=lambda x: int(x[:-4])) # 排序 first_img = Image.open(os.path.join(img_dir, img_list[0])) # 第一张图片对象 else_imgs = [Image.open(os.path.join(img_dir, img)) for img in img_list[1:]] # 剩余图片对象 first_img.save("record.gif", append_images=else_imgs, duration=300, # 每张图片的过过渡时间 save_all=True) # 拼接保存,如果想要循环播放可以加上loop=0
refer:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2019-12-24 关于后台管理数据可视化设计的10条规则笔记
2019-12-24 缓存算法LRU笔记