zoukankan      html  css  js  c++  java
  • 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

    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

    最终效果--有点像幻灯片


    refer:
  • 相关阅读:
    bzoj 2784: [JLOI2012]时间流逝【树形期望dp】
    bzoj 3566: [SHOI2014]概率充电器【树形概率dp】
    bzoj 5277: [Usaco2018 Open]Out of Sorts【冒泡排序瞎搞】
    【04】在 PR 中关闭 issue
    【03】代码格式化+高亮
    【02】粘贴图像
    【01】在 Github 上编辑代码
    【02】GitHub 工具 Octotree
    【01】恶趣味玩转 GitHub commit 历史记录
    【07】Firebug监控网络情况
  • 原文地址:https://www.cnblogs.com/-wenli/p/14183203.html
Copyright © 2011-2022 走看看