lambda
lambda

Reputation: 97

Python, Selenium: how to click on javascript:void(0) element

I have an "onclick" element in a webpage,

<a href="javascript:void(0)" onclick=
    "toIndexHtml('3','http://xxxxxxxxxxx/trade','0')">
<i></i>
<span></span>
trade
</a>

It is shown in the webpage as a button and I want to click on it, I tried to search for it using the following code:

driver.find_element_by_xpath("//a[contains(@onclick,'toIndexHtml')]").click()
WebDriverWait(driver, 20).until(
    EC.element_to_be_clickable((By.XPATH,"/html/body/div/ul/li[3]/a"))).click()

Both are not working, please suggest if there is any other ways! Thanks in advance!

P.S.: I am using Chrome WebDriver and Chrome v64.

Upvotes: 4

Views: 3554

Answers (1)

undetected Selenium
undetected Selenium

Reputation: 193378

Your first locator looks perfect and should have worked.

Ideally, to click on the 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[onclick^='toIndexHtml']"))).click()
    
  • Using XPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[starts-with(@onclick,'toIndexHtml')]"))).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
    

Upvotes: 1

Related Questions