18-03-2025, 03:42 PM
Hola colegas, estoy desarrollando un pequeño sistema validador de CFDI, ya tengo el código que me lee el xml y me extrae datos, también me conecto a la página de SAT (Aquí en México).
Pero tengo el error que no detecta el id "method":"css selector","selector":"[id="ctl00_MainContent_txtRFCEmisor"]", comparto el código que utilizo, igual y alguien le sirve.
El error que me arroja es el siguiente:
Pero tengo el error que no detecta el id "method":"css selector","selector":"[id="ctl00_MainContent_txtRFCEmisor"]", comparto el código que utilizo, igual y alguien le sirve.
Código:
import xml.etree.ElementTree as ET
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
import time
def leer_datos_xml(ruta_xml):
try:
tree = ET.parse(ruta_xml)
root = tree.getroot()
# Espacio de nombres SAT (verifica en tu XML)
ns = {'cfdi': 'http://www.sat.gob.mx/cfd/4', 'tfd': 'http://www.sat.gob.mx/TimbreFiscalDigital'}
# Extraer datos clave
emisor = root.find(".//cfdi:Emisor", ns).attrib.get('Rfc', 'No encontrado')
receptor = root.find(".//cfdi:Receptor", ns).attrib.get('Rfc', 'No encontrado')
total = root.attrib.get('Total', '0.00')
uuid = root.find(".//tfd:TimbreFiscalDigital", ns).attrib.get('UUID', 'No encontrado')
return emisor, receptor, total, uuid
except Exception as e:
print(f"Error al leer el XML: {e}")
return None, None, None, None
def validar_cfdi_sat(rfc_emisor, rfc_receptor, total, uuid):
url = "https://verificacfdi.facturaelectronica.sat.gob.mx/default.aspx"
params = {
'id': uuid,
're': rfc_emisor,
'rr': rfc_receptor,
'tt': f"{float(total):.6f}"
}
try:
ruta = r"C:\chromedriver\chromedriver.exe"
service = Service(ruta)
options = webdriver.ChromeOptions()
# options.add_argument("--headless")
driver = webdriver.Chrome(service=service, options=options)
driver.get(url)
driver.save_screenshot(r"validadorCFDI\error.png")
# driver.quit
# Esperar que cargue la página
time.sleep(3)
# Llenar los campos
driver.find_element(By.ID, "ctl00_MainContent_txtRFCEmisor").send_keys(rfc_emisor)
driver.find_element(By.ID, "ctl00_MainContent_txtRFCReceptor").send_keys(rfc_receptor)
driver.find_element(By.ID, "ctl00_MainContent_txtUUID").send_keys(uuid)
driver.find_element(By.ID, "ctl00_MainContent_txtTotal").send_keys(f"{float(total):.6f}")
# Clic en el botón de consulta
driver.find_element(By.ID, "ctl00_MainContent_btnConsultar").click()
print(driver.page_source)
# Esperar la respuesta
time.sleep(5)
# Obtener el estado del CFDI
estado_element = driver.find_element(By.ID, "ctl00_MainContent_lblEstado")
if estado_element:
estado = estado_element.text.strip()
driver.quit()
return f"Estado del CFDI: {estado}"
else:
driver.quit()
return "No se pudo obtener el estado del CFDI."
except Exception as e:
return f"Error en la consulta: {e}"
# ? Archivo XML de la factura
archivo_xml = r"validadorCFDI\OOTN8605082G3_FACCB7C.xml"
# Leer datos del XML
rfc_emisor, rfc_receptor, total, uuid = leer_datos_xml(archivo_xml)
if rfc_emisor and rfc_receptor and total and uuid:
# Validar en el SAT
resultado = validar_cfdi_sat(rfc_emisor, rfc_receptor, total, uuid)
print(resultado)
else:
print("No se pudieron extraer los datos del XML.")
El error que me arroja es el siguiente:
Código:
DevTools listening on ws://127.0.0.1:63266/devtools/browser/c00d1670-621d-4c29-838e-fd84e69745c6
Error en la consulta: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="ctl00_MainContent_txtRFCEmisor"]"}
(Session info: chrome=134.0.6998.89); For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#no-such-element-exception
Stacktrace:
GetHandleVerifier [0x00007FF7B78BFE45+26629]
(No symbol) [0x00007FF7B7826010]
(No symbol) [0x00007FF7B76B931A]
(No symbol) [0x00007FF7B770F8E7]
(No symbol) [0x00007FF7B770FB1C]
(No symbol) [0x00007FF7B77634A7]
(No symbol) [0x00007FF7B7737AEF]
(No symbol) [0x00007FF7B7760169]
(No symbol) [0x00007FF7B7737883]
(No symbol) [0x00007FF7B7700550]
(No symbol) [0x00007FF7B7701803]
GetHandleVerifier [0x00007FF7B7C172BD+3529853]
GetHandleVerifier [0x00007FF7B7C2DA22+3621858]
GetHandleVerifier [0x00007FF7B7C224D3+3575443]
GetHandleVerifier [0x00007FF7B798B77A+860474]
(No symbol) [0x00007FF7B783088F]
(No symbol) [0x00007FF7B782CBC4]
(No symbol) [0x00007FF7B782CD66]
(No symbol) [0x00007FF7B781C2C9]
BaseThreadInitThunk [0x00007FFAB05E7374+20]
RtlUserThreadStart [0x00007FFAB199CC91+33]