Selenium截屏和录屏

发表于:2021-3-08 09:37

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:-零    来源:博客园

  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
  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

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号