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

Python/Selenium中XPath末尾如何使用通配符匹配指定格式片段?

Selenium定位嵌套路径不固定的read more按钮方案

你不需要纠结XPath后半段的路径差异,也不用写复杂的通配符匹配,用Selenium和XPath原生的节点查找逻辑就能稳定定位,以下是经过验证的可落地方案:

方案1:一次性获取所有目标按钮(实现最简单)

所有read more按钮的标签文本、href属性完全一致,直接用属性+文本匹配的XPath全局查找即可,完全不受中间嵌套层级影响:

from selenium.webdriver.common.by import By

# 直接获取页面所有符合特征的read more按钮,无需关心父级路径
read_more_list = driver.find_elements(
    By.XPATH, 
    '//a[@href="javascript:;" and text()="read more"]'
)

拿到元素列表后直接遍历,逐个执行点击、抓内容、关弹窗的逻辑即可,不需要自己维护article序号。

方案2:按article序号逐个定位(适配你原有的循环逻辑)

如果你需要严格按照帖子排序逐个处理,只需要把XPath里article节点后的单斜杠改成双斜杠即可:双斜杠//在XPath里代表匹配当前节点下任意深度的后代节点,相当于自动通配所有中间的p、ul、li等嵌套层级,不需要你手动写全路径。
示例代码:

from selenium.webdriver.common.by import By

# 先统计页面总共有多少个帖子article
total_articles = len(driver.find_elements(By.XPATH, '//*[@id="page"]/div[2]/article'))

for idx in range(1, total_articles + 1):
    # 定位对应序号的帖子,在帖子内部任意层级找read more按钮
    read_more_btn = driver.find_element(
        By.XPATH,
        f'//*[@id="page"]/div[2]/article[{idx}]//a[text()="read more"]'
    )
    # 先把按钮滚动到页面可视区域,避免遮挡导致点击失败
    driver.execute_script("arguments[0].scrollIntoView({block: 'center'});", read_more_btn)
    read_more_btn.click()
    
    # 这里写你的显式等待、抓取弹窗内容、关闭弹窗逻辑

踩坑提示

  • 不要用模糊的class、id属性定位,你给出的按钮本身的文本和href特征已经足够唯一,不会误抓其他元素。
  • 点击按钮后记得加显式等待,等弹窗内容加载完成再抓取数据,避免拿到空内容。
  • 关闭弹窗后建议加100-300ms的短等待,等弹窗遮罩完全消失再操作下一个按钮,避免出现元素不可点击的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 10:18:06