selenium录屏python_Selenium实现录屏的一种方法
由于UI层自动化的不稳定性,经常会遇到执行中断或用例失败的问题,以下是一些常见的措施。
详细的日志
定位出错时截图
Pytest的缓存机制(可以记录成功了哪些失败了哪些)
自动重试机制(如pytest-rerunfailures)
用例录像
用例录像是最直观的一种方式,可以查看到实时的操作情况。很多云平台如Saucelabs等都提供了用例录像的功能。
然而很遗憾selenium本身没有这种能力。除了借助三方软件如ffmpeg同步录屏外,另外一种实现方法是另外启动一个线程,不断截图,最后将图片拼接成git。
操作方法如下。
实时截图
编写一个循环截图函数shot
def shot(dr):
i = 0
while True:
img_file = os.path.join(img_dir, f'{i}.png')
try:
dr.save_screenshot(img_file)
except:
return
i += 1
由于webdriver接口执行截图命令的速度限制,每一轮截图无需再sleep。
操作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()
图片拼接成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
最终效果--有点像幻灯片
image
selenium录屏python_Selenium实现录屏的一种方法相关推荐
- 电视android怎么解决,安卓手机怎么投屏到电视?用这3种方法可完美解决
安卓手机怎么投屏到电视?用这3种方法可完美解决 2021年04月01日 17:47作者:网络编辑:王动 分享 有些用户觉得智能电视能看的资源太少,想把安卓手机里的资源投屏到电视上看,该怎么办呢?下面简 ...
- 小屏幕android电视,手机屏幕还能投屏到电视?教你4种方法,1秒钟小屏变大屏
手机屏幕太小,尤其是看大片的时候,总有种意犹未尽的感觉,那么今天就来教大家手机怎样一键从小屏变成大屏,在家也能享受影院级的观赏感. 下面为大家准备了2种方法,一起来看看吧! 1.手机自带投屏功能 安卓 ...
- 电脑蓝屏代码0x00000050怎么解决?3种方法快速解决
电脑蓝屏代码0x00000050是Windows系统中常见的一个蓝屏错误,通常是由于操作系统或硬件设备驱动程序的问题导致的.可使用驱动人生推荐的以下3种方法解决. 一.重装驱动程序 电脑蓝屏代码0x0 ...
- python等待网页加载_Python Selenium等待(waits)页面加载完成的三种方法
从网上load的: 网页常常会因为网络原因,程序问题等等导致打开网页慢,一直在那里打圈圈. 出现这种情况时网页里的很多元素就没有加载完成,如果你刚好要定位的元素没有加载完,这时定位的话程序就会抛出异常 ...
- 安卓投屏大师_还不会把手机投屏到电脑?教你四种方法,柯达带你直播玩的更溜...
现在很多人都喜欢把手机的内容投屏到电脑上,毕竟手机小小的屏幕看着确实不够满足.特别是一些喜欢做直播的朋友,就会需要把手机投屏到电脑上来完成手游直播.可是却有很多朋友表示不知道如何操作才能够实现,今天小 ...
- 背景随意更换,同时改变多个竖屏短视频背景图片的两种方法
怎么在电脑上批量剪辑多个短视频呢?比如改变多个竖屏短视频的背景图,下面可以随小编一起用视频剪辑高手来试试. 一.直接添加上下图片 运行视频剪辑高手,在"批量剪辑视频"功能上,单击& ...
- 电脑为啥老是黑屏?只因为你不知道这9种方法
1.检查主机电源,工作是否正常. 首先,通过杳看主机机箱面板电源指示灯是否亮,及电源风扇是否转动来确定主机系统有没有得到电源供应.其次,用万用表检查外部电压是否符合要求,电压过高或过低都可能引起主机电 ...
- 批量剪辑教程,将竖屏视频剪辑为横屏的四种方法
我们在刷抖音时,看到大部分视频都是竖屏展示的,但是有些视频平台,在上传视频时,需要将竖屏的视频改为横屏的,今天小编就用视频剪辑高手中的四种功能,批量将多个竖屏剪辑为横屏视频. 方法一:顺时旋转90度 ...
- linux kill进程后黑屏,Linux中Kill进程的N种方法
常规篇: 首先,用ps查看进程,方法如下: $ ps -ef -- smx 1822 1 0 11:38 ? 00:00:49 gnome-terminal smx ...
最新文章
- 【Windows】清除win10开始菜单中失效打程序标签
- 【转载】mysql常用函数汇总
- 基于 OpenCV 和 OpenPose 的棒球挥杆人体姿势估计
- 迁移学习之MobileNet(88层)和MobileNetV2(88层)
- SAP WM高阶之上架策略B (Bulk Storage)
- zh-cn 与 zh-hans 是什么关系、有什么区别
- SAP评估控制 Valuation control
- SAP SD基本业务总结
- Ocelot Api网关教程(9)- QoS
- 前端学习(1164):剩余参数02
- bash/shell编程学习(2)
- Logistic分类函数
- Android 系统(74)--Android重启原因分析
- 表-创建表-表的转换函数
- 基于jQuery UI CSS Framework开发Widget
- 微信公众号调用扫一扫,使扫一扫支持扫PDF417格式的条码
- iOS 蓝牙扫描设备注意 2021-10-12
- 测试驱动开发(TDD)开发思路
- GD32创建工程与启动文件选择
- TexMacs环境变量
热门文章
- 【沙滩爱心桌面主题】_9.4
- 在MingW上更新的G ++获取大量错误消息(G++ updated on MingW gets massive error messages)
- Yolov5身份证检测——模型训练
- VS中更改exe程序图标
- 初识ELK(日志系统)
- Python数据分析-pandas-数据处理
- [转]将106键盘布局(日式键盘布局)改为101键盘布局(美式键盘布局)(
- 可以带着游泳的耳机、游泳听歌的运动耳机推荐
- 生命是脆弱的-人生最大的挫折
- 苏轼:醉笑陪君三万场 不诉离殇