#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
с новой функцией