Python & Selenium: Как дождаться появления текста, чтобы продолжить? - PullRequest
0 голосов
/ 12 февраля 2020

Я пытаюсь автоматизировать извлечение курсов акций на своем веб-сайте брокера, потому что Yahoo и Google Finance имеют задержки. Но мне нужен код, чтобы дождаться, когда «домашний брокер» будет в сети, чтобы он мог продолжить работу со списком ...

Вот мой код:

expected = 'online'
while True:
    try:
       driver.find_element_by_xpath('//*[@id="spnStatusConexao"]').text == expected
    except NoSuchElementException:
        print('offline')
    else:
    print('online')

Но во время тестирования это, он печатает «онлайн», даже когда homebroker отображает сообщение «офлайн».

Мне нужно напечатать «офлайн», когда текст xpath равен: офлайн. И печатать 'онлайн', когда текст xpath равен: онлайн.

РЕДАКТИРОВАТЬ:

outter HTML:

<span id="spnStatusConexao" hover="DV_bgConexao" class="StatusConexao online">online</span>

XPath:

//*[@id="spnStatusConexao"]

Полный XPath:

/html/body/form/div[9]/div/div/p[2]/span

1 Ответ

1 голос
/ 12 февраля 2020

expected_conditions в Python имеет встроенную операцию для этого, называемую text_to_be_present_in_element. Приведенный ниже фрагмент кода будет ожидать, пока элемент span будет содержать текст online:

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


WebDriverWait(driver, 10).until(EC.text_to_be_present_in_element((By.ID, "spnStatusConexao"), 'online'))

Если это не работает, вы можете попробовать вызвать WebDriverWait для presence_of_element_located и включить text в вашем запросе XPath:

WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//span[@id='spnStatusConexao' and contains(text(),'online')]")))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...