. функция щелчка для selenium работает непоследовательно — chrome

#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. Если он хочет взять текст из первого документа и щелкнуть первую соответствующую ссылку, это сработает.