How to click a javascript button via Selenium in python

Question:

I am trying to pull some quotes on a website. To get the quote you have to click the Javascript button below:

enter image description here

Below is my python code to click the button:

driver = webdriver.Edge()
driver.get("http://generatorland.com/glgenerator.aspx?id=86")
driver.find_element(By.XPATH,"//a[@href='JavaScript:void(0);']").click()

However, when I run the code to test the button press, it throws an error:

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//a[@href='JavaScript:void(0);']"}
  (Session info: MicrosoftEdge=110.0.1587.46)

Why can’t it find the button, even when I specify the href sample for the XPATH to find?

Asked By: user2494337

||

Answers:

You can move a step deeper and use the <img> tag.


Solution

The desired element is a dynamic element, so to click on the clickable element you need to induce WebDriverWait for the element_to_be_clickable() and you can use either of the following locator strategies:

  • Using CSS_SELECTOR:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a > img[alt='Confucius']"))).click()
    
  • Using XPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a/img[@alt='Confucius']"))).click()
    
  • Note: You have to add the following imports :

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
Answered By: undetected Selenium
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.