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

Selenium使用XPath获取ID信息时遭遇'TypeError'错误求助

解决Selenium获取ID时的TypeError问题

问题场景

需要从以下HTML结构中提取ID信息:

<div class="content">
  <ul>
    <li class="info-holder">
      <h3 style=""><a href="#" style="">Information</a></h3>
      <div class="tabela-lista-valor">
        <p class="outer tabela-lista-item"> Id </p>
        <p class="inner" style="font-family: 'Open Sans', Arial, Helvetica, sans-serif !important;margin-bottom: 0px;padding: 8px 8px;">1</p>
      </div>
    </li>
  </ul>
</div>

执行代码时触发错误:TypeError: 'WebElement' object is not subscriptable,原代码如下:

for z in range(2):
    id_test = navegador.find_element(By.XPATH,"(//p[contains(concat(' ', normalize-space(@class), ' '),' inner ')])[1]")
    for i in range(1,500): 
        dados_temporarios = {'ID': id_test[i].text}
        dados.append(dados_temporarios)
    navegador.find_element(By.XPATH, "//a[contains(text(),'next')]").click()

错误原因

  1. find_element()方法返回单个WebElement对象,而非列表,因此不能使用id_test[i]这种下标方式访问。
  2. 内层循环range(1,500)逻辑无效:既没有重新获取元素,也没有对应页面上的500个ID元素。
  3. 翻页后未重新定位元素,后续操作会引用过期元素,可能触发StaleElementReferenceException。

修正后的代码

场景1:每个页面仅含1个ID元素

dados = []
for z in range(2):
    # 获取当前页面的ID文本
    id_text = navegador.find_element(By.XPATH, "//p[contains(concat(' ', normalize-space(@class), ' '),' inner ')]").text
    dados.append({'ID': id_text})
    # 点击下一页
    navegador.find_element(By.XPATH, "//a[contains(text(),'next')]").click()

场景2:每个页面有多个ID元素(class为inner的p标签)

dados = []
for z in range(2):
    # 获取当前页面所有匹配的ID元素列表
    id_elements = navegador.find_elements(By.XPATH, "//p[contains(concat(' ', normalize-space(@class), ' '),' inner ')]")
    # 遍历提取每个ID文本
    for elem in id_elements:
        dados.append({'ID': elem.text})
    # 点击下一页
    navegador.find_element(By.XPATH, "//a[contains(text(),'next')]").click()

关键说明

  • 使用find_elements()(复数形式)获取页面上所有匹配元素,返回WebElement列表,支持遍历或下标访问。
  • 翻页后必须重新调用元素定位方法,避免引用过期元素。
  • 若目标元素的class属性无多余空格,XPath可简化为//p[@class='inner'],原表达式的concat+normalize-space是为了兼容class属性带空格的场景,可按需保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 10:25:20