Python 和 Selenium:如何等到文本出现才继续?

gui*_*ado 4 selenium xpath web-scraping python-3.x

我正在尝试在我的经纪人网站上自动提取股票价格,因为雅虎和谷歌财经有延迟。但我需要代码来等待“家庭经纪人”上线,以便它可以继续抓取......

这是我的代码:

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

但是,在测试时,即使家庭经纪人显示“离线”消息,它也会打印“在线”。

当 xpath 文本等于:offline 时,我需要打印“offline”。当 xpath 文本等于:online 时,打印“online”。

编辑:

外部 HTML:

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

X路径:

<span id="spnStatusConexao" hover="DV_bgConexao" class="StatusConexao online">online</span>
Run Code Online (Sandbox Code Playgroud)

完整的 XPath:

//*[@id="spnStatusConexao"]
Run Code Online (Sandbox Code Playgroud)

Chr*_*ine 9

expected_conditionsPython 中有一个内置的操作称为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'))
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,您可以尝试调用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')]")))
Run Code Online (Sandbox Code Playgroud)