Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

495
Views
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 4 years ago · Hanz Gallego
4 answers
Answer question

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 4 years ago · Hanz Gallego Report

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 4 years ago · Hanz Gallego Report

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 4 years ago · Hanz Gallego Report

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 4 years ago · Hanz Gallego Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!