Как перейти по ссылке с find_element_by_ * через Selenium и python - PullRequest
0 голосов
/ 23 декабря 2018

Мне нужно нажать на подтверждение по электронной почте в моем почтовом ящике.но невозможно щелкнуть ссылку.

вот мой 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 голосов
/ 24 декабря 2018

text / word magazinedirect является частью атрибута 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()
    
0 голосов
/ 25 декабря 2018

Вы можете использовать явное ожидание

wait = WebDriverWait(driver, 10)
element = wait.until(EC.element_to_be_clickable((By.XPATH, '//a[contains(@rel,'nofollow') and contains(@href, 'newspaperdirect')]')))
0 голосов
/ 23 декабря 2018

Добавьте немного ожидания и используйте 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()
...