• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

373
Vistas
Los comandos find_element_by_* están en desuso en Selenium

Al iniciar la función

 def run(driver_path): driver = webdriver.Chrome(executable_path=driver_path) driver.get('https://tproger.ru/quiz/real-programmer/') button = driver.find_element_by_class_name("quiz_button") button.click() run(driver_path)

Estoy recibiendo errores como estos:

 <ipython-input-27-c5a7960e105f>:6: DeprecationWarning: executable_path has been deprecated, please pass in a Service object driver = webdriver.Chrome(executable_path=driver_path) <ipython-input-27-c5a7960e105f>:10: DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element() instead button = driver.find_element_by_class_name("quiz_button")

... pero no puedo entender por qué.

Estoy usando webdriver en la última versión para la versión de mi Chrome. no se por que me sale

 `find_element_by_* commands are deprecated`

... cuando está en la documentación que existe el comando.

over 3 years ago · Hanz Gallego
4 Respuestas
Responde la pregunta

0

Este mensaje de error...

 DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element() instead

... implica que los comandos find_element_by_* están en desuso en las últimas bibliotecas de Selenium Python.

Como menciona @AutomatedTester : esta advertencia de desuso fue el reflejo de los cambios realizados con respecto a la decisión de simplificar las API en todos los idiomas y esto hace eso.


Solución

En su lugar, debe usar find_element() . Como ejemplo:

Tienes que incluir las siguientes importaciones

 from selenium.webdriver.common.by import By
  • Usando class_name :

     button = driver.find_element_by_class_name("quiz_button")

    Necesita ser reemplazado con:

     button = driver.find_element(By.CLASS_NAME, "quiz_button")

En líneas similares también hay que cambiar lo siguiente:

  • Usando id :

     element = find_element_by_id("element_id")

    Necesita ser reemplazado con:

     element = driver.find_element(By.ID, "element_id")
  • Usando name :

     element = find_element_by_name("element_name")

    Necesita ser reemplazado con:

     element = driver.find_element(By.NAME, "element_name")
  • Usando link_text :

     element = find_element_by_link_text("element_link_text")

    Necesita ser reemplazado con:

     element = driver.find_element(By.LINK_TEXT, "element_link_text")
  • Uso partial_link_text :

     element = find_element_by_partial_link_text("element_partial_link_text")

    Necesita ser reemplazado con:

     element = driver.find_element(By.PARTIAL_LINK_TEXT, "element_partial_link_text")
  • Usando tag_name :

     element = find_element_by_tag_name("element_tag_name")

    Necesita ser reemplazado con:

     element = driver.find_element(By.TAG_NAME, "element_tag_name")
  • Usando css_selector :

     element = find_element_by_css_selector("element_css_selector")

    Necesita ser reemplazado con:

     element = driver.find_element(By.CSS_SELECTOR, "element_css_selector")
  • Usando xpath :

     element = find_element_by_xpath("element_xpath")

    Necesita ser reemplazado con:

     element = driver.find_element(By.XPATH, "element_xpath")

Nota: si está buscando y reemplazando para implementar los cambios anteriores, deberá hacer lo mismo para find_elements_* , es decir, las formas plurales de find_element_* .

También puede encontrar útil esta guía de actualización, ya que cubre algunos otros cambios no relacionados que puede necesitar realizar al actualizar: https://www.selenium.dev/documentation/webdriver/getting_started/upgrade_to_selenium_4/

over 3 years ago · Hanz Gallego Denunciar

0

@DebanjanB mencionó y explicó la nueva estructura, también es mejor usar estas líneas:

 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.chrome.service import Service s = Service('C:/Users/.../chromedriver.exe') driver = webdriver.Chrome(service=s)
over 3 years ago · Hanz Gallego Denunciar

0

No se pueden ubicar elementos en Selenium (Python)

Este cambio está en línea con el registro de cambios de Selenium 4 Release Candidate 1 que menciona

el selenio 4 causa esto; Degradé a selenium==3.141.0 (última versión de selenium 3) (hay un error con selenium==3.0.0, así que no vayas demasiado lejos)

ingrese la descripción de la imagen aquí

y funciona

over 3 years ago · Hanz Gallego Denunciar

0

Como mencionaron otros, debe usar find_element() o find_elements() en lugar de find_element_by_*() o find_elements_by_*() .

Escribí el patrón de expresiones regulares para reemplazar los métodos obsoletos por uno nuevo, así que intente esto si lo necesita.

 # from - eg find_element_by_id("test") find_element(s?)_by_([az]+)\((.*) # to - eg find_element(By.ID, "test") find_element$1(By.\U$2\E, $3

Nota: necesita la línea de importación para usar los nuevos métodos

 from selenium.webdriver.common.by import By
over 3 years ago · Hanz Gallego Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda