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

网页爬取问题:点击表格中Quest编号无法打开详情页(附代码)

问题排查与修复方案

核心问题分析

你的代码点击失效主要由以下几个原因导致:

  • XPath路径错误:全局路径//table//tbody//tr//td[2]会重复查找整个页面元素,而非基于已定位的table,导致元素定位不准确。
  • Stale Element异常:执行driver.back()后,原页面的元素会因页面重新渲染失效,循环后续元素时触发错误。
  • 点击对象错误:Quest编号的跳转逻辑绑定在td内的<a>标签上,直接点击td单元格无法触发跳转。
  • 缺少依赖模块:未导入time模块,time.sleep(2)会引发报错。
  • 等待条件不合理:仅等待元素存在,未确保元素可交互,可能在元素未加载完成时点击。

修复后的代码

from selenium import webdriver
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  # 补充time模块导入

driver = webdriver.Chrome()
driver.get('https://qcpi.questcdn.com/cdn/posting/?group=1950787&provider=1950787')

# 改用索引循环,规避stale element问题
# 这里假设先爬取前10条,可根据实际需求调整范围
for index in range(1, 11):
    # 每次循环重新等待表格加载并获取对应行的链接
    table = WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.ID, 'table_id')))
    # 定位到td内的可点击a标签(使用相对路径)
    quest_link = WebDriverWait(table, 10).until(
        EC.element_to_be_clickable((By.XPATH, f'./tbody//tr[{index}]//td[2]//a'))
    )
    quest_number_text = quest_link.text
    print(quest_number_text)
    
    # 点击链接触发跳转
    quest_link.click()
    
    # 等待详情页核心元素加载完成
    WebDriverWait(driver, 40).until(EC.presence_of_element_located((By.CLASS_NAME, 'posting-second-header')))
    page_source = driver.page_source
    print('Quest Number:', quest_number_text)
    print('Page Source:', page_source)
    
    time.sleep(2)
    # 返回表格页
    driver.back()
    # 等待表格页重新加载完成,确保下一次操作正常
    WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.ID, 'table_id')))

driver.quit()

关键修改说明

  1. 索引循环替代元素列表循环:每次返回页面后重新定位元素,彻底解决stale element异常问题。
  2. 定位a标签而非td:直接绑定跳转事件的是链接元素,确保点击操作触发页面跳转。
  3. 优化等待条件:使用element_to_be_clickable确保元素可交互后再点击,避免因元素未加载完成导致点击失效。
  4. 补充模块导入:添加import time解决sleep函数报错问题。
  5. 返回后重新等待表格:确保页面完全刷新后再进行下一次循环,避免元素定位失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 15:12:47