首页 > 其他 > 详细

Selenium截屏和录屏

时间:2020-12-24 12:34:14      阅读:31      评论:0      收藏:0      [点我收藏+]

 

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:

Selenium截屏和录屏

原文:https://www.cnblogs.com/-wenli/p/14183203.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!