如何通过Selenium和python单击带有find_element_by_ *的链接

时间:2018-12-23 11:50:27

标签: python selenium xpath css-selectors webdriver

我需要单击收件箱中的确认邮件。但无法单击链接。

这是我的html和经过尝试的代码

<td bgcolor="#ffffff" style="padding:20px;">
<div style="color:rgb(0,0,0);font-size:16px;">
<strong>You are almost done!</strong><br><br>
    To complete Sunday Lankadeepa E-Paper registration, please click the link below:
</div>
<br><br>
<div style="width:616px;">
<a href="http://Sundaylankadeepa.newspaperdirect.com/epaper/confirmmail.aspx?code=ZUZ3S2K17GR&amp;rt=trial" rel="nofollow">

http://Sundaylankadeepa.newspaperdirect.com/epaper/confirmmail.aspx?code=ZUZ3K17GR&amp;rt=trial</a>
</div>
<br><br>
If clicking the link doesn't work, please select and copy the entire link. Then open a browser, paste the link in the address bar, and press Enter or Return on your keyboard.

尝试过的代码...

text = "newspaperdirect"
element = driver.find_element_by_xpath('//a[contains(text(),"%s")]' % text)
element.click()

错误:

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: 
{"method":"xpath","selector":"//a[contains(text(),"newspaperdirect")]"}
 (Session info: chrome=71.0.3578.98)
  (Driver info: chromedriver=2.45.615291 (ec3682e3c9061c10f26ea9e5cdcf3c53f3f74387),
platform=Windows NT 6.2.9200 x86_64)

3 个答案:

答案 0 :(得分:0)

添加一些等待并使用find_element_by_partial_link_text

import time
from selenium import webdriver
browser = webdriver.Chrome(executable_path='/home/bitto/chromedriver')
url='file:///test.html' # url or .html file path here
text = "newspaperdirect"
browser.implicitly_wait(20) # seconds
browser.get(url)
browser.find_element_by_partial_link_text(text).click()

答案 1 :(得分:0)

文本/单词 newspaperdirect href标签的<a>属性的一部分,也是innerHTML

的一部分

解决方案

要单击元素,可以使用以下解决方案之一:

  • 使用PARTIAL_LINK_TEXT

    driver.find_element_by_partial_link_text("newspaperdirect").click()
    
  • 使用CSS_SELECTOR

    driver.find_element_by_css_selector("div>a[rel='nofollow'][href*='newspaperdirect']").click()
    
  • 使用XPATH

    driver.find_element_by_xpath("//div/a[@rel='nofollow' and contains(@href, 'newspaperdirect')]").click()
    

答案 2 :(得分:0)

您可以使用显式等待

wait = WebDriverWait(driver, 10)
element = wait.until(EC.element_to_be_clickable((By.XPATH, '//a[contains(@rel,'nofollow') and contains(@href, 'newspaperdirect')]')))