python selenium google-chrome selenium-chromedriver pageloadstrategy

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



google-chrome selenium-chromedriver (2)

Selenium driver.get (url) espere hasta que se cargue la página completa. Pero una página de raspado intenta cargar un script JS muerto. Entonces mi script Python lo espera y no funciona 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 es de otra manera?

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


Selenium Webdriver proporciona dos tipos de esperas: implícitas y explícitas. Una espera explícita hace que WebDriver espere a que se produzca una determinada condición antes de continuar con la ejecución.

from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Firefox() driver.get("http://somedomain/url_that_delays_loading") try: element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "myDynamicElement")) ) finally: driver.quit()

Esto espera hasta 10 segundos antes de lanzar una TimeoutException menos que encuentre que el elemento regrese en 10 segundos.

Entonces, una solución podría ser establecer un tiempo de espera y si el elemento no queda atrapado en ese período fijo, tome la excepción y registre el evento o nada y finalmente continúe. El código de muestra ha sido tomado de here


Cuando Selenium carga una página / url de manera predeterminada, sigue una configuración predeterminada con pageLoadStrategy establecido en normal . Para que Selenium no espere la carga completa de la página, podemos configurar pageLoadStrategy . pageLoadStrategy admite 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 el 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 : los valores de pageLoadStrategy son normal , eager y none es un requisito según el borrador del editor de WebDriver W3C, pero el valor de pageLoadStrategy como eager sigue siendo un WIP (Work In Progress) dentro de la implementación de ChromeDriver . Puede encontrar una discusión detallada en la solución de estrategia de carga de página "Eager" para Chromedriver Selenium en Python