Selenium截圖和錄屏
阿新 • • 發佈:2020-12-24
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: https://www.jianshu.com/p/a538e5cd4a35 https://www.cnblogs.com/superhin/p/13857521.html