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

853
Views
find_element_by_* commands are deprecated in selenium

When starting the function

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)

I'm getting errors like these:

<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")

... but I can't understand why.

I'm using webdriver at the latest version for my chrome's version. I don't why I get

`find_element_by_* commands are deprecated` 

... when it's in the documentation that the command exists.

over 4 years ago · Hanz Gallego
4 answers
Answer question

0

This error message...

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

...implies that the find_element_by_* commands are deprecated in the latest Selenium Python libraries.

As @AutomatedTester mentions: This DeprecationWarning was the reflection of the changes made with respect to the decision to simplify the APIs across the languages and this does that.


Solution

Instead you have to use find_element(). As an example:

You have to include the following imports

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

    button = driver.find_element_by_class_name("quiz_button")
    

    Needs be replaced with:

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

In similar lines you also have to change the following:

  • Using id:

    element = find_element_by_id("element_id")
    

    Needs be replaced with:

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

    element = find_element_by_name("element_name")
    

    Needs be replaced with:

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

    element = find_element_by_link_text("element_link_text")
    

    Needs be replaced with:

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

    element = find_element_by_partial_link_text("element_partial_link_text")
    

    Needs be replaced with:

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

    element = find_element_by_tag_name("element_tag_name")
    

    Needs be replaced with:

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

    element = find_element_by_css_selector("element_css_selector")
    

    Needs be replaced with:

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

    element = find_element_by_xpath("element_xpath")
    

    Needs be replaced with:

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

Note: If you are searching and replacing to implement the above changes, you will need to do the same thing for find_elements_*, i.e. the plural forms of find_element_*.

You may also find this upgrade guide useful as it covers some other unrelated changes you may need to make when upgrading: https://www.selenium.dev/documentation/webdriver/getting_started/upgrade_to_selenium_4/

over 4 years ago · Hanz Gallego Report

0

@DebanjanB mentioned and explained the new structure , also it's better use these lines:

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

As others mentioned, you should use find_element() or find_elements() instead of find_element_by_*() or find_elements_by_*().

I wrote the regex pattern to replace the deprecated methods to new one, so try this if you need.

# from - e.g. find_element_by_id("test")

find_element(s?)_by_([a-z]+)\((.*)

# to - e.g. find_element(By.ID, "test")

find_element$1(By.\U$2\E, $3

Note: you need the import line to use the new methods

from selenium.webdriver.common.by import By
over 4 years ago · Hanz Gallego Report

0

Unable to locate elements in Selenium (Python)

This change is inline with the Selenium 4 Release Candidate 1 changelog which mentions

selenium 4 causes this; I downgrade to selenium==3.141.0 (lastest version of selenium 3) (there is error with selenium==3.0.0, so don't going too far lol )

enter image description here

and it works

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!