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
由于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: