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

Selenium循环点击同class元素并爬取数据的问题求助

问题分析与修正代码

你的代码存在几个核心问题:

  1. 提前获取的elems列表,在返回原页面后会变成失效元素(Stale Element)——因为页面DOM已刷新,原元素的引用不再有效。
  2. 每次点击都调用driver.find_element(By.CLASS_NAME, 'XYZabc'),这只会重复点击第一个元素,无法依次处理后续目标。
  3. data的存储逻辑混乱,把元素文本和信息字典分开追加,不利于后续数据处理。

修正后的代码如下:

data = []
max_count = 10  # 最多处理10个元素,可按需调整
current_index = 0

while True:
    # 每次返回原页面后重新获取元素列表,避免失效
    elems = driver.find_elements(By.CLASS_NAME, 'XYZabc')
    # 终止条件:无更多元素,或已处理到第10个
    if current_index >= len(elems) or current_index >= max_count:
        break
    
    # 获取当前元素的文本
    elem_text = elems[current_index].get_attribute('innerText')
    # 点击第current_index个目标元素
    elems[current_index].click()
    
    # 提取目标页面信息
    title = driver.find_element(By.XPATH, '//*[@id="main"]/div[1]/div/div/div/div/h1').get_attribute('innerText')
    date = driver.find_element(By.CLASS_NAME, 'publish-date').get_attribute('innerText')
    
    # 整合信息到字典,统一存入data
    data.append({
        "LinkText": elem_text,
        "Title": title,
        "Date": date
    })
    
    # 返回原页面
    driver.back()
    # 索引递增,处理下一个元素
    current_index += 1

关键改动说明:

  • 改用while循环,每次回到原页面后重新获取元素列表,彻底解决失效元素问题。
  • 用current_index定位当前要点击的元素,确保依次处理第1、2、...个目标。
  • 把元素文本、标题、日期整合到同一个字典,保持data结构统一,方便后续使用。
  • 保留了最多处理10个元素的限制,可通过修改max_count调整数量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 08:24:18