Селен - не удается получить вновь сгенерированный текст в лаборатории - PullRequest
0 голосов
/ 24 апреля 2019

Я сделал действительно классный инструмент для Google Colab Laboratory. Предполагается запустить ноутбук, подождать 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

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

1 Ответ

0 голосов
/ 24 апреля 2019

Вам не нужно использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...