Conceptos básicos de selenio 2-ventajas y desventajas, tres métodos de espera espera y limitaciones

Recientemente, usé selenio para recolectar y encontré algunos problemas Tengo una comprensión más profunda de las ventajas y desventajas del selenio.

Déjame hablar primero de las ventajas :

  1. Interfaz visual, fácil de aprender para principiantes.
  2. La recopilación de datos se puede realizar sin una comprensión profunda de la interacción entre la carga dinámica y el backend
  3. Más en línea con el hábito de la gente común de operar páginas web para copiar y pegar

Las desventajas también son obvias:

  1. La eficiencia de carga es baja, es fácil causar obstrucciones y la eficiencia de recolección no es alta.
  2. No es fácil de migrar y necesita más modificaciones para adaptarse a Linux sin interfaz.
  3. La recopilación visual es propensa a problemas de navegador y no es sólida

Creo que todos los problemas se pueden resolver Los problemas anteriores son una cuestión de mi capacidad personal.

La publicación anterior del blog hizo un estudio simple del selenio, y hoy entraremos en el combate real de varios problemas encontrados Este artículo se enfoca principalmente en el problema de la carga de elementos de la página.

Por lo general, cuando se recopila selenium, al igual que cuando visitamos la página, necesitamos esperar a que se carguen los datos de la página antes de recopilar. Este proceso es el predeterminado en selenium, pero a veces la carga de la página encontrará algunos problemas (como algunos js internos La carga no se completa), aunque se recolectan los datos, la página necesita esperar un tiempo para operar. Al mismo tiempo, para aliviar la presión de acceder al servidor y reducir alguna frecuencia de acceso, generalmente se puede usar el combinación de time.sleep () y aleatorio para controlar la recopilación y el intervalo de actualización.

Al observar la información, generalmente hay tres formas de resolver el problema de carga:

  1. Obligado a esperar para dormir

    sleep(5) #打开页面以后等待5s
    
  2. Espera implícitamente implícitamente_wait ()

    driver.implicitly_wait(10) #隐式等待10秒
    

    El método proporcionado por WebDriver, una vez configurado, esta espera implícita funcionará en todo el ciclo de vida de la instancia del objeto WebDriver. No apunta a un elemento determinado, sino que es una espera de elemento global, es decir, al posicionar un elemento, necesitas para esperar a que se carguen todos los elementos de la página. Ejecutará la siguiente instrucción. Si se excede el tiempo establecido, se lanzará una excepción.

    Se puede entender que si la página no termina de cargarse, espera o informa una excepción a lo largo del tiempo.

    Si no lo configura de esta manera, el valor predeterminado es implícitamente_wait (0), y se recopilará cuando aparezca la página cuando se cargue el elemento, por lo que es posible que no podamos recopilar nuestro elemento de destino, lo que resulta en una serie errores (consulte el enlace a continuación).

    https://stackoverflow.com/questions/53588966/python-selenium-difference-between-driver-implicitly-wait-and-time-sleep

    Desventajas: cuando no se pueden cargar algunos js en la página, pero el elemento que quiere encontrar ya ha salido, continuará esperando hasta que se cargue la página (el círculo en la esquina superior izquierda de la pestaña del navegador no gira) , y luego se ejecutará la siguiente oración. En algunos casos, la velocidad de ejecución del script se verá afectada.

  3. Espere explícitamente WebDriverWait ()

La espera explícita puede establecer el tiempo de espera de carga para un elemento específico

https://blog.csdn.net/sinat_41774836/article/details/88965281

wait = WebDriverWait(driver,10,0.5)
element =waite.until(EC.presence_of_element_located((By.ID,"kw"),message="")
# 此处注意,如果省略message='',则By.ID外面是两层();presence_of_element_located是定位方法和定位元素是否显示。

Paquetes involucrados

from selenium import webdriver
import time
import random
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By

Supongo que te gusta

Origin blog.csdn.net/u010472858/article/details/104282065
Recomendado
Clasificación