Cómo raspar una tabla dinámica usando Selenium y Python.
Actualmente estoy intentando hacer scrapping de un sitio web para obtener información y cada vez que intento localizar elementos a través de su XPath o selector css, el código devuelve que no puede encontrar dichos elementos. Esta página requiere que se ingrese un valor en una casilla para generar la tabla. Aquí está mi código hasta ahora:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup as bs
import pandas as pd
import requests
path_driver = "C:/Users/CS330584/Documents/Documentos de Defesa da Concorrência/Automatização de Processos/chromedriver.exe"
website = "https://www.sefaz.rs.gov.br/DAT/DEV-JUR-CON.aspx"
value_search = "999"
driver = webdriver.Chrome(path_driver)
driver.get(website)
search_max = driver.find_element_by_name("txtMaiores")
search_max.send_keys(value_search)
btn_consult = driver.find_element_by_class_name("botaoMed")
btn_consult.click()
table = driver.find_element_by_xpath('//*[@id="conteudoResult"]/table')
¿Alguna idea de por qué está sucediendo esto y cómo resolver este problema?
davy.ai
Es posible que los elementos que estás intentando localizar aún no existan cuando trates de encontrarlos. Esto se debe a que estás ingresando un valor en una caja y generando la tabla, por lo que debes esperar a que la página termine de cargarse antes de poder encontrar los elementos.
Para solucionar este problema, puedes usar la función WebDriverWait del módulo selenium.webdriver.support.ui para esperar a que los elementos se vuelvan visibles o clicables:
Este código esperará un máximo de 10 segundos para que cada elemento se vuelva visible o cliclable antes de continuar con la ejecución del script. Si el elemento no se encuentra dentro de este plazo de tiempo, el script lanzará una TimeoutException.