You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Selenium Python等待动态文本值加载完成

解决方案

问题根源

  1. 用错等待方法:text_to_be_present_in_element_value是等待元素的value属性(通常对应输入框内容)包含指定文本,而非元素的显示文本,完全不适用于当前场景。
  2. 正则不被支持:Selenium内置的text_to_be_present_*系列方法均不支持正则表达式,只能传入固定字符串匹配。
  3. 隐式等待冲突:同时使用implicitly_wait和显式WebDriverWait可能导致等待逻辑混乱,建议只保留显式等待。

解决步骤

自定义显式等待条件,等待目标元素的文本非空且匹配你需要的数字; 数字; %格式:

  1. 导入正则模块re处理格式匹配。
  2. 使用WebDriverWait结合lambda表达式,同时检查元素存在性与文本格式。
  3. 确保定位器准确指向目标元素。

修改后的代码

from selenium import webdriver 
from selenium.webdriver.chrome.options import Options 
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
import re

# 配置无头模式
options = Options()
options.headless = True
options.add_argument("--window-size=1920,1200")
options.add_argument("--disable-gpu")  # 无头模式优化参数

# 初始化驱动(替换为你的ChromeDriver路径)
DRIVER_PATH = "你的ChromeDriver路径"
driver = webdriver.Chrome(options=options, executable_path=DRIVER_PATH)

output = []
try:
    driver.get("https://projects.worldbank.org/en/projects-operations/project-detail/P159382")
    
    # 等待并点击环境与自然资源管理下拉框
    nat_res_element = WebDriverWait(driver, 10).until(
        lambda d: d.find_element(By.XPATH, '//*[@id="accordion-theme"]/div[1]/div[1]/span')
    )
    nat_res_element.click()
    
    # 等待目标元素文本加载完成并匹配格式
    target_element = WebDriverWait(driver, 10).until(
        lambda d: (
            elem := d.find_element(By.XPATH, '//*[@id="collapse0"]/div/div/ul/li/span[2]')
        ) and re.match(r'^\d+; \d+; \d+%$', elem.text.strip())
    )
    
    output.append(target_element.text.strip())
    print(output)
finally:
    driver.quit()

代码说明

  • 用lambda表达式自定义等待逻辑:先获取元素,再检查其文本是否匹配数字; 数字; 数字%的正则格式(可根据实际需求调整正则规则)。
  • 移除implicitly_wait,避免与显式等待产生逻辑冲突。
  • 添加try-finally块确保驱动正常关闭,防止资源泄漏。
  • 对文本做strip()处理,避免首尾空格干扰格式匹配。

内容的提问来源于stack exchange,提问作者MorrisseyJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 14:36:19