Selenium — Не удается получить сгенерированный текст в совместной лаборатории

#python #selenium #google-colaboratory

#python #selenium #google-colaboratory

Вопрос:

Я создал действительно классный инструмент для совместной лаборатории Google. Предполагается запустить записную книжку, подождать n времени, запустить ее снова. Чтобы узнать, когда работа с блокнотом закончится, я печатаю строку в конце блокнота следующим образом:

print("forkin" "me")

Я пытаюсь обнаружить его следующим образом после прокрутки страницы вниз:

 def exists_by_text(driver, text):
    driver.implicitly_wait(0)
    try:
        driver.find_element_by_xpath("//*[contains(text(), '" str(text) "')]")
    except NoSuchElementException:
        driver.implicitly_wait(30)
        return False
    driver.implicitly_wait(30)
    return True
  

но он просто не обнаруживает текст. Я постоянно использую эту функцию в других местах, но она не работает в записной книжке colab. Вот весь скрипт: colabctl

примечание: Если вы столкнетесь с этим вопросом и получите идею использовать мой colabctl, пожалуйста, сначала прочитайте readme репозитория. Там существует важное сообщение.

Ответ №1:

Вам не нужно использовать implicitly_wait() несколько раз в вашем коде. Согласно документации, вам нужно установить его только один раз.

Всегда лучше использовать явные ожидания, которые ожидают только до тех пор, пока не будет выполнено ожидаемое условие.

Проблема здесь в том, что вы не используете даже неявное ожидание перед поиском элемента. Вы устанавливаете его равным нулю, прежде чем пытаться найти элемент.

Попробуйте следующий код:

 def exists_by_text(driver, text):
    try:
        WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH,"//*[contains(text(), '" str(text) "')]")))
#    except NoSuchElementException:
    except TimeoutException:
        return False
    return True

  

Для этого вам потребуется следующий импорт:

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

Комментарии:

1. Этот код создает другое исключение, поэтому я изменил его на except Exception . Он запускался, но все равно не соответствовал тексту при печати.

2. Можете ли вы предоставить ссылку или HTML?

3. Просто создайте пустой блокнот совместной лаборатории Google ( colab.research.google.com ) и добавить к нему: print(«forkin» «me»)

4. @SAhmed Как указал OP, вы все еще чувствуете, что WebDriverWait вернется NoSuchElementException при сбое?

5. Теперь он возвращается TimeoutException с новой функцией