0

I have this element

<p><a onclick="return getpermission(this);" id="ctl00_ContentPlaceHolder1_btnSub" class="btn btn-danger" data-endisbutton="" href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$btnSub','')">▼ Taylor-Swift-Bad-Blood-ft.-Kendrick-Lamar.srt</a> <strong>Subtitle (.SRT) </strong></p>

on this page and I want to click on 'a' tag, so I found the 'a'tag element("elem") and ran (1st way) elem.click() then recieved

selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element <a onclick="return getpermission(this);" id="ctl00_ContentPlaceHolder1_btnSub" class="btn btn-danger" data-endisbutton="" href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$btnSub','')">...</a> is not clickable at point (185, 668). Other element would receive the click: <a href="https://www.rentanadviser.com/downloads/kripto_video_protector_setup.exe" rel="nofollow" target="_blank">...</a>
  (Session info: chrome=99.0.4844.82)

then ran (2nd way)

from selenium.webdriver.common.action_chains import ActionChains
action=ActionChains(driver)
action.move_to_element(elem)#or the line below
action.move_to_element_with_offset(elem,0,80)
action.click()
action.perform()

then got error:

selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
  (Session info: chrome=99.0.4844.82)

then did (3rd way) in which first element of elem1 is the elem(a tag)

driver.execute_script("arguments[0].click;", elem1)

which doesn't do anything.

btw this way I found 'elem'

links=driver.find_elements_by_tag_name("p")
    for i in range(len(links)):
        strong=links[i].find_elements_by_tag_name('strong')
        if l(strong)>0:
            if links[i].find_elements_by_tag_name('strong')[0].text=='Subtitle (.SRT)':
                elem=links[i].find_elements_by_tag_name('a')[0]
1
  • please share all your relevant code Commented Mar 21, 2022 at 18:08

2 Answers 2

1

If these buttons are what you are looking for: DOM Snapshot

If you want only the .srt button:

srt_btn = WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.XPATH, "//div[@id='dowloadbuttons']//p//a[contains(text(), '.srt')]")))
driver.execute_script("arguments[0].click();", srt_btn)

If you want click all the 4 buttons:

all_btn = WebDriverWait(driver, 30).until(EC.visibility_of_all_elements_located((By.XPATH, "//div[@id='dowloadbuttons']//p//a[contains(@class, 'btn')]")))
for btn in all_btn:
    driver.execute_script("arguments[0].click();", btn)
Sign up to request clarification or add additional context in comments.

Comments

1

You need scroll the page to reach the element and then click on the element.

Use webdriverwait and wait for element to be clickable.

url = 'https://www.rentanadviser.com/subtitles/getsubtitle.aspx?artist=Taylor%20Swift&song=Bad%20Blood%20ft.%20Kendrick%20Lamar'
driver.get(url)
wait=WebDriverWait(driver,10)
button1=wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,"#ctl00_ContentPlaceHolder1_btnSub")))
driver.execute_script("arguments[0].scrollIntoView();", button1)
button1.click()
print("clicked")
time.sleep(10) #just to check whether downloading

You need to import below library.

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.