Enseñanza de automatización de la interfaz de usuario de pila completa de Quniao (9): ¿Por qué Selenium es lento? Eso es porque cargó la configuración de la política incorrectamente

I. Introducción

Muchos fans, e incluso algunos amigos con cierta experiencia en la industria, dicen que el selenio tiene un bajo rendimiento y es muy lento, y tarda mucho en abrir una página web antes de que comience a ejecutarse. Puedo entender la pregunta planteada por los fanáticos principiantes, pero me sorprende un poco decir eso con varios años de experiencia en la industria. Parece que muchos socios pequeños todavía no tienen el hábito de leer documentos oficiales. Aquí hay una breve explicación de por qué crees que el selenio es lento y cómo solucionar este problema:

Cuando iniciamos el navegador a través de webdriver (como iniciar Google Chrome: webdriver.Chrome()), iniciará un navegador sin caché, cookies. En este momento driver.get("https://xxx"), es naturalmente lento acceder a la página, porque necesita cargar los recursos de la página. Si sus imágenes, estilos y archivos js son demasiado grandes, se volverá más lento en este momento.

Es lo mismo que solemos borrar el caché del navegador y luego visitarlo, esto no es una falla en el rendimiento de Selnium en sí.

Pero en este momento, los amigos definitivamente tendrán dudas. Incluso si el caché del navegador se borra y se vuelve a visitar, ¡no es tan lento como ejecutar Selnium! El botón en el que desea hacer clic ha aparecido durante mucho tiempo y todavía no ha hecho clic. ¿No se llama lento?

En realidad, esto está relacionado con la estrategia de carga de páginas de Selenium.



2. Explicación detallada de la estrategia de carga de páginas de Selenium

Selnium tiene tres estrategias de carga de página (pageLoadStrategy):

  1. normal: espere a que se cargue toda la página antes de iniciar la operación
  2. ansioso: espere a que se cargue todo el árbol dom, es decir, DOMContentLoadedel evento se completa, es decir, siempre que el HTML esté completamente cargado y analizado, la operación comenzará. Deje de esperar a que se carguen imágenes, estilos y subtramas.
  3. ninguno: espere a que se complete la descarga de html, incluso si el análisis no se ha iniciado antes de ejecutar la operación.

De forma predeterminada, cuando Selenium WebDriver carga una página, sigue la normalestrategia de carga, por lo que hará que la página se cargue demasiado lentamente, especialmente cuando los archivos como imágenes y estilos son demasiado grandes, la lentitud es especialmente obvia.


Por lo tanto, podemos ajustar la estrategia de carga de la página de Selenium según la situación real para acortar el tiempo de espera y mejorar la velocidad de ejecución.

La siguiente imagen es el caso predeterminado (sin especificar manualmente la estrategia de carga) para visitar la página de inicio de iQIYI y luego hacer clic en la película, el tiempo total: alrededor de 7 segundos
inserte la descripción de la imagen aquí


La siguiente imagen es para usar la eagerestrategia de carga para acceder a la página de inicio de iQiyi y luego hacer clic en la película, el tiempo total: aproximadamente 3.6s

El código de configuración es el siguiente:

chrome_options = Options()
chrome_options.page_load_strategy = 'eager'
driver = webdriver.Chrome(options=chrome_options)

inserte la descripción de la imagen aquí


Se puede ver claramente que la velocidad de acceso se ha vuelto más rápida.


¿Crees que eso es todo? ¡Y aún más rápido!

La estrategia de carga se establece en none, y retryse introduce el reintento (el propósito es evitar errores, por supuesto, se puede establecer una espera implícita, pero ningún reintento es seguro) Se puede ejecutar en aproximadamente 2 s . El código completo es el siguiente:

import datetime
from retrying import retry  # 需第三方库,需pip进行安装
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By


@retry(wait_fixed=10, stop_max_attempt_number=1)
def click(path):
    driver.find_element(By.XPATH, path).click()


chrome_options = Options()
chrome_options.page_load_strategy = 'none'
driver = webdriver.Chrome(options=chrome_options)
start_time = datetime.datetime.now()
driver.get('https://www.iqiyi.com/')
click('//*[@id="block-C"]/div/div/div/div[1]/div[1]/div/div[1]/div/div/a/span[2]')
end_time = datetime.datetime.now()
print(end_time - start_time)

3. Resumen

Entonces, el selenio no es lento, es solo que no eligió bien cargar la estrategia y pensó erróneamente que era lento.

Cuando nos encontremos con un problema más desconcertante o confuso, deberíamos acudir por primera vez a la documentación oficial, tal vez ya tenga solución.

Además, este tutorial de columna dejará de actualizarse indefinidamente, porque recientemente estoy escribiendo una columna más interesante y seca "Construyendo una plataforma de prueba automatizada desde 0". ¡Bienvenido a suscribirse a soporte!

Dirección de demostración en línea: http://121.43.43.59/ (Cuenta: contraseña de administrador: 123456)


Supongo que te gusta

Origin blog.csdn.net/momoda118/article/details/120624777
Recomendado
Clasificación