Una forma de implementar la grabación de pantalla de Selenium en Python (integrar imágenes en imágenes dinámicas)

Debido a la inestabilidad de la automatización de la capa de la interfaz de usuario, es común encontrar interrupciones en la ejecución o fallas en los casos de uso. Estas son algunas medidas comunes que se deben tomar.

1. Registros detallados
2. Capturas de pantalla cuando se colocan errores
3. Mecanismo de almacenamiento en caché de Pytest (puede registrar éxitos y fallas)
4. Mecanismo de reintento automático (como pytest-rerunfailures)
5. Video de caso de uso

El registro de casos de uso es la forma más intuitiva de ver operaciones en tiempo real. Muchas plataformas en la nube, como Saucelabs, brindan la función de registro de casos de uso.
Desafortunadamente, sin embargo, el selenio en sí mismo no tiene esta capacidad. Además de usar software de terceros como ffmpeg para grabar la pantalla de forma sincrónica, otro método de implementación es iniciar otro hilo, tomar capturas de pantalla continuamente y finalmente unir las imágenes en git.
El método de operación es el siguiente.

captura de pantalla en tiempo real

1. Escriba una captura de función de captura de pantalla en bucle

def shot(dr):
    i = 0
    while True:
        img_file = os.path.join(img_dir, f'{i}.png')
        intente:
            dr.save_screenshot(img_file)
        excepto:
            devuelva
        i += 1
debido a la interfaz webdriver ejecución El límite de velocidad del comando de captura de pantalla, no es necesario dormir para cada ronda de captura de pantalla.

2. Cuando opere la web, inicie un hilo

img_dir = 'img' # directorio de imágenes temporales
dr = webdriver.Chrome()

t = threading.Thread(target=shot, args=(dr, img_dir)) # Crear un nuevo hilo
t.start() # Iniciar el hilo de la captura de pantalla

dr.get('https://www.baidu.com')
dr.find_element('id', 'kw').send_keys('简书 韩志超')
dr.find_element('id', 'su'). clic()
tiempo.dormir(1)
dr.get('https://www.qq.com')
dr.back()
tiempo.dormir(2)
dr.salir()

3. Unir imágenes en gif

Es necesario instalar la almohada: pip install pillow

img_list = os.listdir(img_dir) # Listar todas las imágenes en el directorio
img_list.sort(key=lambda x: int(x[:-4])) # Ordenar

first_img = Image.open(os.path.join(img_dir, img_list[0])) # El primer objeto de imagen
else_imgs = [Image.open(os.path.join(img_dir, img)) para img en img_list[1 : ]] # objetos de imagen restantes

first_img.save("record.gif", append_images=else_imgs,
               duration=300,
               save_all=True) # guardar inmediatamente
               

código completo

desde selenium import webdriver
import threading
import os
import time
from PIL import Image


def clear_dir(ruta):
    """Crear o borrar un directorio"""
    if not os.path.isdir(ruta):
        os.mkdir(ruta) # crear un directorio
    else: # borrar un directorio
        [os.remove(os .ruta.join(ruta, nombre_archivo)) para nombre_archivo en os.listdir(ruta)]


def shot(dr, img_dir):
    """Función de captura de pantalla en bucle"""
    i = 0
    clear_dir(img_dir) # Limpiar el directorio
    mientras es True:
        img_file = os.path.join(img_dir, f'{i}.png')
        intente:
            dr.save_screenshot(img_file)
        excepto:
            return
        i += 1


# Operación de Selenium
img_dir = 'img' # Directorio de imágenes temporales
dr = webdriver.Chrome()

t = threading.Thread(target=shot, args=(dr, img_dir)) # Crear un nuevo hilo
t.start() # Iniciar el hilo de la captura de pantalla

dr.get('https://www.baidu.com')
dr.find_element('id', 'kw').send_keys('简书 韩志超')
dr.find_element('id', 'su'). clic()
tiempo.dormir(1)
dr.get('https://www.qq.com')
dr.back()
tiempo.dormir(2)
dr.salir()

# Unir imágenes en gif
img_list = os.listdir(img_dir) # Listar todas las imágenes en el directorio
img_list.sort(key=lambda x: int(x[:-4])) # Ordenar

first_img = Image.open(os.path.join(img_dir, img_list[0])) # El primer objeto de imagen
else_imgs = [Image.open(os.path.join(img_dir, img)) para img en img_list[1 : ]] # objetos de imagen restantes

first_img.save("record.gif", append_images=else_imgs,
               duration=300, # Tiempo de transición de cada imagen
               save_all=True) # Empalme y guardado, si desea reproducir en bucle, puede agregar loop=0

 

Supongo que te gusta

Origin blog.csdn.net/qq_30273575/article/details/132203185
Recomendado
Clasificación