You need to enable JavaScript to run this app. 使用Selenium获取指定类名div下所有href返回空列表如何解决
优惠活动
大模型
产品
解决方案
定价
更多

使用Selenium获取指定类名div下所有href返回空列表如何解决

Selenium定位目标div内所有链接的问题修正

核心问题根因

你调用方法始终返回空列表,是三个典型的Selenium定位逻辑误用导致的:

  • 定位返回值不匹配:driver.find_elements_by_xpath(...)返回的是匹配规则的元素组成的列表对象,不是单个可操作的WebElement节点。后续直接对列表调用子元素查找方法,不符合API调用规范,自然无法获取结果。如果页面存在多个class以TL开头的div,这种写法还会把所有匹配的div都纳入列表,根本没法锁定你要的目标容器。
  • XPath作用域错位:在已定位的节点下查找子元素时,如果XPath表达式以//开头,Selenium会直接跳出当前节点上下文,从整个HTML文档的根节点开始全局匹配元素,完全达不到“在当前div内部查找”的预期。要限定在当前节点范围内搜索,需要在路径开头加.,标识相对当前节点查找。
  • 查找方法逻辑错配:find_element_by_partial_link_text(...)的匹配规则是匹配标签的可见文本内容,并非匹配href属性值,把href前缀当可见文本传入,自然无法命中目标元素。

正确实现方案

  1. 先正确锁定单个目标div节点
    如果页面上只有一个class以TL开头的目标div,把多元素查找方法换成单元素查找,拿到可操作的WebElement对象:
    # 老版本Selenium写法(已弃用,仅作兼容参考)
    # div = driver.find_element_by_xpath("//div[starts-with(@class, 'TL')]")
    
    # 官方推荐的最新写法
    from selenium.webdriver.common.by import By
    div = driver.find_element(By.XPATH, "//div[starts-with(@class, 'TL')]")
    
  2. 在目标div的上下文范围内查找所有a标签,提取href值
    用带相对路径标记的XPath,从当前div节点开始匹配符合href规则的a标签:
    # 路径开头的. 表示从当前div节点开始搜索,不会跳出上下文
    link_elems = div.find_elements(By.XPATH, ".//a[starts-with(@href, '/link')]")
    # 批量提取所有href属性值
    all_href_values = [elem.get_attribute("href") for elem in link_elems]
    

额外避坑提示

如果页面上存在多个class以TL开头的div,不要直接靠class模糊匹配锁定容器,需要结合div内的固定文本、相邻节点特征等补充XPath规则,先筛选出真正的目标div,再在其内部查找链接,避免拿到其他容器内的无关链接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 18:54:02