¿Cómo hacer que Selenium no espere hasta que se cargue la página completa, que tiene un script lento?
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.
Cuando Selenium carga una página/url de forma predeterminada, sigue una configuración predeterminada establecida pageLoadStrategy
en normal
. Para que Selenium no espere a que se cargue la página completa, podemos configurar el archivo pageLoadStrategy
. pageLoadStrategy
admite 3 valores diferentes de la siguiente manera:
normal
(carga de página completa)eager
(interactivo)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 :
pageLoadStrategy
valoresnormal
y 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 Pythonnone
pageLoadStrategy
eager
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()