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

使用Selenium WebDriver提取文本数据时仅获单个元素问题求助

问题分析与修复方案

核心问题点

  • 循环逻辑混乱:循环中同时修改number_of_pages_to_enter并使用range(number_of_pages_to_enter),导致循环次数与目标链接索引不匹配;构造XPath时误用递减的number_of_pages_to_enter而非循环变量,每次点击的是倒数第N个链接,而非顺序遍历所有链接。
  • 文本拼接错误:cimek=cim+cim会将同一个标题重复拼接,而非累加不同子页面的标题。
  • 页面返回后的元素定位缺失等待:从子页面返回后,原页面DOM可能重新渲染,未等待元素加载就直接定位,容易导致定位失败。
  • 链接数量统计方式不可靠:通过outerHTML.count("<tr")统计行数容易出错,建议直接通过元素定位获取所有目标行。

修正后的代码

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

# 统计目标链接数量:直接获取所有包含链接的tr(跳过表头等无关行)
rows = WebDriverWait(browser, 10).until(
    EC.presence_of_all_elements_located((By.XPATH, '//*[@id="wrapper"]/main/section/div/div[2]/table/tbody/tr'))
)
# 排除前2行无关内容(遵循原逻辑)
number_of_pages_to_enter = len(rows) - 2
xpatht_eleje = '//*[@id="wrapper"]/main/section/div/div[2]/table/tbody/tr['

cimek = ''
# 使用循环变量i遍历,XPath中tr索引从1开始计数
for i in range(1, number_of_pages_to_enter + 1):
    # 构造当前行的链接XPath
    xpath_expression = f'{xpatht_eleje}{i}]/td[3]/a'
    button_locator = (By.XPATH, xpath_expression)
    button = WebDriverWait(browser, 5).until(
        EC.element_to_be_clickable(button_locator)
    )
    button.click()
    time.sleep(0.5)
    
    # 提取子页面标题(增加等待确保元素加载完成)
    element = WebDriverWait(browser, 5).until(
        EC.presence_of_element_located((By.XPATH, '//*[@id="eventHeader"]/div[2]/div/h1'))
    )
    cim = element.text
    # 累加不同标题,用换行分隔便于查看
    cimek += cim + "\n"
    
    # 返回原页面并等待表格重新加载完成
    browser.back()
    WebDriverWait(browser, 10).until(
        EC.presence_of_all_elements_located((By.XPATH, '//*[@id="wrapper"]/main/section/div/div[2]/table/tbody/tr'))
    )

# 输出结果
print(cimek)

关键优化说明

  • 改用find_elements直接获取所有目标行,统计数量更准确且不易出错。
  • 循环使用i作为tr的索引,确保按顺序遍历每个链接。
  • 文本拼接改为cimek += cim + "\n",正确累加不同子页面的标题内容。
  • 返回原页面后强制等待表格重新加载,避免因DOM未渲染完成导致的定位失败。
  • 将presence_of_element_located改为element_to_be_clickable,确保链接处于可点击状态后再执行操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 09:08:16