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

Python Selenium列表推导式遍历WebElement列表返回重复首条数据问题

问题根因与修复方案

核心错误原因

pull_all_stonks函数中使用的XPath是全局绝对路径,是导致所有结果重复的直接原因:
Selenium的XPath查询规则中,以//开头的路径会从整个HTML文档的根节点开始搜索匹配元素,和你调用find_element的父WebElement完全无关。所以你每次遍历不同的stonk元素调用查询时,返回的永远是整个页面第一个符合//tr/td[2]/a规则的元素,最终所有结果都是第一条数据的重复。

如果要基于当前传入的stonk元素做相对范围查询,必须在XPath开头加.,代表查询范围限定在当前节点的子节点下。

修复代码

修改pull_all_stonks函数的XPath为相对路径即可,因为传入的stonk本身就是tr下的第二个td元素,直接查询其子节点的a标签就可以,写法还可以简化:

def pull_all_stonks(stonk):
    # 开头加. 代表仅在当前stonk元素的子节点中搜索
    stonks_table_name_and_link = stonk.find_element(By.XPATH, './a')
    stonk_name = stonks_table_name_and_link.text
    stonk_link = stonks_table_name_and_link.get_attribute('href')
    return {
        'stonk_name': stonk_name,
        'stonk_link': stonk_link
    }

其他可选优化

  • get_all_stonks函数中定义的stonks_table_selector、stonks_table等多个变量没有实际使用,可以直接删除
  • 全局定义的action变量建议放到函数内部初始化,避免作用域混乱引发的意外操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 14:36:01