Hola comunidad les escribo porque tengo un problema, estoy intentando hacer un script para que navegue dentro de una web, ingresa correctamente y navega pero llega a determinada parte y no hace click y se termina el script.
Alguien me podria dar una mano les paso mi codigo y las imagenes de la pagina.
EL problema esta en articulos no hace click
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
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.chrome.options import Options
import os
import time
Configuración de las opciones de Chrome
chrome_options = Options()
prefs = {
“download.default_directory”: r"C:\Users\tradexuy12\Desktop\power bi\ventas\ventas por articulo y cliente",
“download.prompt_for_download”: False,
“download.directory_upgrade”: True,
“safebrowsing.enabled”: True
}
chrome_options.add_experimental_option(“prefs”, prefs)
Instalar ChromeDriver si es necesario y arrancar el navegador
service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service, options=chrome_options)
Ingresar al sitio web
driver.get(‘https://apperpconsulting.uy/facturacion2/inicio.php’)
try:
wait = WebDriverWait(driver, 20)
# Ingresar credenciales y acceder
username_input = wait.until(EC.presence_of_element_located((By.NAME, 'USU_User')))
password_input = wait.until(EC.presence_of_element_located((By.NAME, 'USU_Pass')))
username_input.send_keys('usuario')
password_input.send_keys('pass')
login_button = wait.until(EC.element_to_be_clickable((By.ID, 'iniciar_sesion')))
login_button.click()
# Esperar a que se cargue el menú lateral y navegar a 'Informes'
informes_link = wait.until(EC.element_to_be_clickable((By.XPATH, "//span[contains(text(), 'Informes')]/ancestor::a")))
informes_link.click()
# Hacer clic en 'Artículos' usando JavaScript y esperar a que el submenú se expanda
articulos_link = wait.until(EC.presence_of_element_located((By.XPATH, "//a[.//span[contains(text(), 'Articulos ')]]")))
driver.execute_script("arguments[0].click();", articulos_link)
# Esperar a que el submenú 'Articulos' se haya expandido
wait.until(EC.presence_of_element_located((By.XPATH, "//ul[contains(@class, 'nav-third-level') and @aria-expanded='true']")))
# Hacer clic en 'Ventas x Artículo x Cliente'
ventas_articulo_cliente_link = wait.until(EC.element_to_be_clickable((By.ID, "menu_ventas_x_articulo_x_cliente")))
ventas_articulo_cliente_link.click()
# Esperar y hacer clic en el botón para descargar el archivo en Excel
excel_button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.dt-button.buttons-excel.buttons-html5")))
excel_button.click()
print("Se ha hecho clic en el botón de Excel.")
# Esperar a que el archivo se descargue completamente
time.sleep(10) # Ajustar este tiempo según sea necesario
# Verificar la descarga y renombrar el archivo
directorio_descargas = r"C:\Users\tradexuy12\Desktop\power bi\ventas\ventas por articulo y cliente"
archivos_descargados = os.listdir(directorio_descargas)
for archivo in archivos_descargados:
if archivo.endswith('.xlsx'):
ruta_original = os.path.join(directorio_descargas, archivo)
ruta_nueva = os.path.join(directorio_descargas, "ventas_por_articulo_y_cliente.xlsx")
if os.path.exists(ruta_nueva):
os.remove(ruta_nueva)
os.rename(ruta_original, ruta_nueva)
print(f"Archivo descargado y renombrado a: {ruta_nueva}")
break
except TimeoutException as e:
print(f"Se produjo un error con la carga de la página o el elemento no fue encontrado: {e}")
finally:
driver.quit()
print(“Terminando el script…”)
![image|690x328]
(upload://tMJ7tFlVJuB2FWHrj2bVZhSrWop.png)
Mil gracias!!!