Python 实现Selenium录屏的一种方法(图片整合成动态图)

这篇具有很好参考价值的文章主要介绍了Python 实现Selenium录屏的一种方法(图片整合成动态图)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

由于UI层自动化的不稳定性,经常会遇到执行中断或用例失败的问题,以下是一些常见的措施。

1.详细的日志
2.定位出错时截图
3.Pytest的缓存机制(可以记录成功了哪些失败了哪些)
4.自动重试机制(如pytest-rerunfailures)
5.用例录像

用例录像是最直观的一种方式,可以查看到实时的操作情况。很多云平台如Saucelabs等都提供了用例录像的功能。
然而很遗憾selenium本身没有这种能力。除了借助三方软件如ffmpeg同步录屏外,另外一种实现方法是另外启动一个线程,不断截图,最后将图片拼接成git。
操作方法如下。

实时截图

1.编写一个循环截图函数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。

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

 文章来源地址https://www.toymoban.com/news/detail-648909.html

到了这里,关于Python 实现Selenium录屏的一种方法(图片整合成动态图)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 不支持请求方法POST或GET的一种解决方法

    Request method ‘POST‘ not supported(已解决) 该错误一般是请求类型对不上导致的,比如PostMapping和GetMapping请求,一般错误发生在下图所示位置,我把Post和Get搞错了。 值得说的一点是,因为我不确定是不是这里错了,所以一开始我并没有把GetMapping注释掉,我认为在下面加上PostMa

    2024年02月12日
    浏览(36)
  • 人脸识别平台批量导入绑定设备的一种方法

            因为原先平台绑定设备是通过一个界面进行人工选择绑定或一个人一个人绑定设备。如下:  但有时候需要在几千个里选择出几百个,那这种方式就不大现实了,需要另外一种方法。   目前相到可以通过导入批量数据进行绑定的方式。 一、前端 主要是显示选择文件

    2024年02月11日
    浏览(37)
  • Unity 代码设置UI尺寸的一种方法

    在Unity中 UI的实际宽高可以通过rect.size获得,但是这个属性是只读的无法修改。 所以想要修改尺寸,通常有两种方式 方法1:使用rect.SizeDelta来修改UI的大小,而SizeDelta会根据锚点设置的不同变化,数值上也不直观,不便于操作 方法2:使用SetSizeWithCurrentAnchors方法设置宽高 但是突然想

    2024年02月02日
    浏览(25)
  • Windows上获取父进程的一种简单方法

    测试平台:win10 专业版 21H2 1904 编译平台:gcc version 12.2.0 (x86_64-posix-seh-rev2, Built by MinGW-W64 project) 代码如下:

    2024年02月11日
    浏览(29)
  • FPGA远程更新/远程调试的一种简单方法

    之前介绍过一种远程(无线)更新的方式,详见《起飞!通过无线WIFI下载调试FPGA》,这种方式缺点有两个:一是速度较慢;二是我们的设备中需要增加一个无线设备,增加成本的同时增加了暴露的风险。这两点即无法在调试的时候使用也没办法在实际设备中使用。今天我们

    2024年02月09日
    浏览(28)
  • 【运维】解决 mac office 中乱码的一种方法

    由于微软 office 在 mac 中的代码不匹配等问题,造成部分在 windows 中生成的文档用 mac office 中打开时会有部分乱码。现在笔者找到一种方法,可以解决该问题。 1.安装最新版本的 mac office,我这里是 office2021 2.对windows 中生成有乱码的文档,使用 keynote或者pages 打开,乱码消失

    2024年02月05日
    浏览(27)
  • PDF文件中字体乱码的一种简单的处理方法

    问题PDF文件的下载链接 这文件用Acrobat打开,无法搜索文本,复制文本出来也都是乱码。但用sumatra PDF打开就不存在这个问题! 用Acrobat的印前检查解决。preflight即可。 这功能菜单或按钮隐藏着,不妨用搜索的方法,英文版找preflight,中文版找 印前检查。 点击之后在弹出的

    2024年01月17日
    浏览(29)
  • IDEA 部署Tomcat部署工件失败的一种解决方法

    先放上一些前人的解决方法 IDEA中部署Tomcat部署工件失败解决办法_tomcat部署工件时出错_fly in the dream的博客-CSDN博客使用IDEA部署Tomcat报出工件部署失败问题情况_部署工件错误-CSDN博客 Artifact “xxx - xxxx“:war exploded:部署工件时出错。请参阅服务器日志了解详细信息-CSDN博客 因为

    2024年02月01日
    浏览(35)
  • 关于小程序如何长按复制长文本的方法(比较简单的一种)

    在我们开发小程序时,可能会遇到一些场景,需要你复制弹框中的链接到手机浏览器中访问。 方法如下: 1.首先需要一个view盒子,添加css属性word-break: break-all;这个是自动换行用的避免文本过长跑出盒子外。 2.在上面的view盒子中包一个text长文本,并设置属性selectable=\\\"true\\\" user-sele

    2024年02月15日
    浏览(42)
  • VSCode出现“ModuleNotFoundError: No module named XXX“的一种解决方法

    这里考虑的情况只针对用户\\\"自定义的\\\"python包,而非可以通过pip安装的(如numpy之类) 在出错的import代码之前加入: 出现这种错误的一种可能原因是vscode的默认python解释器路径有问题,导致无法搜索到用户工作路径下的自定义模块包。

    2024年02月12日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包