Поиск элемента с явным ожиданием с использованием selenium webdriver в python

Я пытаюсь найти элемент с текстом ссылки, я использую следующий код

handle = driver.window_handles
#handle for windows
driver.switch_to.window(handle[1])
#switching to new window
link = wait.until(EC.presence_of_element_located((By.LINK_TEXT, "Followers ")))

И я получаю следующую трассировку

Traceback (most recent call last):
File "<pyshell#28>", line 1, in <module>
link = wait.until(EC.presence_of_element_located((By.LINK_TEXT, "Followers ")))
File "C:\Python27\lib\site-packages\selenium\webdriver\support\wait.py", line 71, in until
raise TimeoutException(message)
TimeoutException: Message: ''
</module></pyshell#28>

HTML элемента, который я пытаюсь выбрать, является

<a href="." target="_blank">Followers <span>43,799</span></a>

Как я могу решить эту проблему??

1 ответ

Если вы используете By.LINK_TEXT, должна быть ссылка с таким текстом: " Followers, но у вас есть Followers 43,799.

В вашем случае вместо этого вы должны использовать By.PARTIAL_LINK_TEXT:

wait.until(EC.presence_of_element_located((By.PARTIAL_LINK_TEXT, 'Followers')))

ОБНОВЛЕНИЕ Здесь рабочий пример:

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

driver = webdriver.Chrome() # CHANGEME
driver.get('http://www.quora.com/Kevin-Rose')
element = WebDriverWait(driver, 2).until(
 EC.presence_of_element_located((By.PARTIAL_LINK_TEXT, "Followers"))
)
element.click()

licensed under cc by-sa 3.0 with attribution.