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: