es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Excepción de elemento inexistente en Selenium, pero el elemento está presente allí.

Estaba intentando extraer algunos datos de un sitio web. Estoy usando Selenium para ello, pero estoy recibiendo un NoSuchElementException cuando trato de hacer clic o obtener datos de los elementos en el sitio, incluso cuando el elemento está presente.

Código:

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By

driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get(‘https://www.priceking.com/’)
driver.maximize_window()
driver.find_element(By.XPATH, “/html/body/div/center/font/a”).click()

Aquí está el enlace del sitio que estaba usando: priceking.

No sé por qué no puedo localizar ninguno de los elementos en el sitio.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Pueden haber múltiples razones por las cuales te encuentras con la excepción NoSuchElementException a pesar de que el elemento esté presente en el sitio web. Aquí te mostramos algunas cosas que puedes intentar para resolver el problema:

    1. Espera a que el elemento sea visible: A veces, la página puede no haber cargado completamente cuando intentas acceder a los elementos en ella. En estos casos, puedes usar la clase WebDriverWait para esperar a que el elemento esté visible antes de intentar interactuar con él. Aquí te mostramos un ejemplo:
      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.support import expected_conditions as EC
      
      driver.get('https://www.priceking.com/')
      wait = WebDriverWait(driver, 10)
      element = wait.until(EC.visibility_of_element_located((By.XPATH, '/html/body/div/center/font/a')))
      element.click()
      

      Este código esperará hasta 10 segundos para que el elemento sea visible antes de intentar hacer clic en él. Puedes ajustar el tiempo de espera según tus necesidades.

    2. Cambia a un iframe si está presente: A veces, los sitios web usan iframes para mostrar contenido. Si el elemento que estás intentando acceder está presente dentro de un iframe, primero tendrás que cambiar a ese iframe antes de intentar acceder al elemento. Puedes hacer esto usando el método switch_to.frame() en Selenium. Aquí te mostramos un ejemplo:

      driver.get('https://www.priceking.com/')
      iframe = driver.find_element(By.XPATH, '//iframe[@class="grx-iframe"]')
      driver.switch_to.frame(iframe)
      driver.find_element(By.XPATH, '/html/body/div/center/font/a').click()
      driver.switch_to.default_content()
      

      Este código primero cambiará al iframe que contiene el elemento, hará clic en él y luego volverá al contenido principal.

    3. Revisa tu estrategia de localización de elementos: Es posible que tu XPath o selector CSS esté incorrecto, causando que Selenium no encuentre el elemento. Revisa tu estrategia de selección para asegurarte que es correcta.

    Usando las técnicas anteriores, deberías poder rasparse datos del sitio web con éxito.

Comments are closed.