#selenium
#селен
Вопрос:
У меня есть этот простой код, чтобы щелкнуть первую бумажную ссылку Organoid Modeling of the Tumor Immune Microenvironment.
по этой ссылке.
title_wait = WebDriverWait(driver,5).until(
EC.presence_of_element_located((By.CLASS_NAME, "docsum-title")))
print('found title ' str(title))
element = WebDriverWait(driver,5).until(EC.element_to_be_clickable((By.LINK_TEXT, str(title)))).click();
print('found link to click')
Иногда мой код будет работать, но примерно в 50% случаев он просто пропускает прямо над .click()
и переходит к печати ниже. Любая помощь будет оценена!
Комментарии:
1. Увеличьте время с 5 до чего-то большего. Webdriver ожидает увеличения каждые 500 мс в течение 5 секунд, может пропустить элемент.
Ответ №1:
На самом деле проблема не во времени ожидания. Вы допустили небольшую ошибку в этой строке: element = WebDriverWait(driver,5).until(EC.element_to_be_clickable((By.LINK_TEXT, str(title)))).click();
Прежде всего, title — это переменная типа selenium.webdriver.remote.webelement.WebElement
. Когда вы преобразуете это в str, вы получаете следующее: <selenium.webdriver.remote.webelement.WebElement (session="21a8944e81b4dce8386fdf91067a2ddd", element="17660b77-61f4-4b2d-b5e8-f845ce97ad1e")>
. Так что это неправильный способ получить текст.
Правильный способ — использовать .text
. Заменить str(title)
на title.text
. Ваш код должен работать. Вот окончательный код:
title = WebDriverWait(driver,5).until(
EC.presence_of_element_located((By.CLASS_NAME, "docsum-title")))
print('found title ' title.text)
element = WebDriverWait(driver,5).until(EC.element_to_be_clickable((By.LINK_TEXT , title.text))).click();
print('found link to click')
Как указал Арундип, вы можете увеличить время ожидания, чтобы улучшить свой код. Но это была основная проблема в коде ur.
Комментарии:
1. На самом деле думал, что он настроил заголовок где-то в другом месте из-за того, что он не срабатывал во время печати. title_wait -> str(заголовок)
2. Можете ли вы перефразировать ваш комментарий? Я не могу понять, что вы хотите передать.
3. Его переменной был title_wait вместо title, поэтому она даже не работала бы на 50%, если бы это было так.
4. Это y, которое я изменил
title_wait
title
в своем ответе.5. Если он хочет взять текст из первого документа и щелкнуть первую соответствующую ссылку, это сработает.