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

Python通过XPath定位含data-gs属性的span提取文本失败求助

问题分析与解决方案

核心问题原因

  1. data-gs属性是动态生成的:该属性值会随每次页面加载变化,用固定值写XPath必然匹配不到元素。
  2. 等待时间不足:sleep(1)无法保证页面完全加载出目标元素,尤其是Google航班这类动态渲染的页面。
  3. 解析方式冗余:将driver.page_source转成lxml树解析,不如直接用Selenium的DOM定位API适配动态页面。

修复后的代码

#!/usr/bin/env python3
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

def main():
    driver = webdriver.Chrome()
    URL = "https://www.google.com/travel/flights/search?tfs=CBwQAhooEgoyMDI0LTA2LTEwagwIAhIIL20vMDFfZDRyDAgDEggvbS8wMTkxNBooEgoyMDI0LTA4LTEzagwIAxIIL20vMDE5MTRyDAgCEggvbS8wMV9kNEABSAFwAYIBCwj___________8BmAEB&tfu=EgYIAhAAGAA&hl=en-US&curr=USD"
    
    driver.get(URL)
    
    # 显式等待元素加载,最多等待10秒
    wait = WebDriverWait(driver, 10)
    price_elements = wait.until(EC.presence_of_all_elements_located(
        (By.XPATH, "//span[@role='text' and contains(@aria-label, 'US dollars')]")
    ))
    
    print(f"找到{len(price_elements)}个价格元素")
    for elem in price_elements:
        # 清理文本中的换行和多余空格
        print(elem.text.strip())
    
    driver.close()
    return

main()

修改说明

  • 改用稳定定位规则:放弃动态的data-gs,使用role='text'+包含US dollars的aria-label组合,这类属性是页面逻辑固定的,不会随加载变化。
  • 显式等待替代固定休眠:WebDriverWait会主动等待目标元素出现后再执行后续代码,避免页面加载慢导致的元素未找到问题。
  • 直接使用Selenium API:无需转成lxml树,Selenium直接操作DOM,更适配Google航班这类动态渲染的页面。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 13:41:08