¿Cómo hacer que Selenium no espere hasta que se cargue la página completa, que tiene un script lento?

Resuelto bl79 asked hace 7 años • 3 respuestas

Selenium driver.get (url)espera hasta que se cargue la página completa. Pero una página de raspado intenta cargar algún script JS inactivo. Entonces mi script de Python lo espera y no funciona durante unos minutos. Este problema puede estar en todas las páginas de un sitio.

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://www.cortinadecor.com/productos/17/estores-enrollables-screen/estores-screen-corti-3000')
# It try load: https://www.cetelem.es/eCommerceCalculadora/resources/js/eCalculadoraCetelemCombo.js 
driver.find_element_by_name('ANCHO').send_keys("100")

¿Cómo limitar el tiempo de espera, bloquear la carga AJAX de un archivo o hay otra forma?

También pruebo mi script en webdriver.Chrome(), pero usaré PhantomJS(), o probablemente Firefox(). Entonces, si algún método utiliza un cambio en la configuración del navegador, entonces debe ser universal.

bl79 avatar Jun 27 '17 07:06 bl79
Aceptado

Cuando Selenium carga una página/url de forma predeterminada, sigue una configuración predeterminada establecida pageLoadStrategyen normal. Para que Selenium no espere a que se cargue la página completa, podemos configurar el archivo pageLoadStrategy. pageLoadStrategyadmite 3 valores diferentes de la siguiente manera:

  1. normal(carga de página completa)
  2. eager(interactivo)
  3. none

Aquí está el bloque de código para configurar pageLoadStrategy:

  • Firefox :

    from selenium import webdriver
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
    
    caps = DesiredCapabilities().FIREFOX
    caps["pageLoadStrategy"] = "normal"  #  complete
    #caps["pageLoadStrategy"] = "eager"  #  interactive
    #caps["pageLoadStrategy"] = "none"
    driver = webdriver.Firefox(desired_capabilities=caps, executable_path=r'C:\path\to\geckodriver.exe')
    driver.get("http://google.com")
    
  • Cromo :

    from selenium import webdriver
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
    
    caps = DesiredCapabilities().CHROME
    caps["pageLoadStrategy"] = "normal"  #  complete
    #caps["pageLoadStrategy"] = "eager"  #  interactive
    #caps["pageLoadStrategy"] = "none"
    driver = webdriver.Chrome(desired_capabilities=caps, executable_path=r'C:\path\to\chromedriver.exe')
    driver.get("http://google.com")
    

Nota : pageLoadStrategyvalores normaly es un requisito según el borrador del editor WebDriver W3Ceager , pero el valor sigue siendo un WIP (trabajo en progreso) dentro de la implementación de ChromeDriver . Puede encontrar una discusión detallada en Solución alternativa de la estrategia de carga de página "ansiosa" para Chromedriver Selenium en PythonnonepageLoadStrategyeager

undetected Selenium avatar Jun 27 '2017 02:06 undetected Selenium

Basado en Selenium docs V4.0, ahora parece ser así:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.page_load_strategy = 'none'
driver = webdriver.Chrome(options=options)
driver.get("http://www.google.com")
driver.quit()
Jurrian avatar Sep 10 '2023 10:09 Jurrian