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

Selenium元素ID/属性定位及多页表格爬取问题求助

解决Selenium爬取表格的常见问题

1. 处理NoSuchElementException与正确使用driver.find_element_by_id

  • 确认元素真实ID:打开浏览器开发者工具(F12)定位目标元素,查看其id属性值。若网站使用动态生成的ID(含随机字符),放弃find_element_by_id,改用find_element_by_xpath或find_element_by_css_selector更可靠。
  • 添加等待机制:元素未加载完成就查找会触发报错,用显式等待替代直接查找:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 最多等待10秒,直到元素出现
wait = WebDriverWait(driver, 10)
target_element = wait.until(EC.presence_of_element_located((By.ID, "真实元素ID")))

2. 正确使用get_attribute获取属性值

  • get_attribute的参数是元素的HTML属性名,常见场景:
    • 获取输入框内容:element.get_attribute("value")
    • 获取链接地址:element.get_attribute("href")
    • 获取图片地址:element.get_attribute("src")
  • 若要获取元素的文本内容,直接用element.text更简便,无需调用get_attribute。

3. 爬取多页表格获取完整数据

  • 循环处理分页:定位「下一页」按钮,判断其是否可点击(如是否含禁用类),循环点击并爬取每页数据:
while True:
    # 爬取当前页表格数据
    table = driver.find_element(By.ID, "表格ID")
    rows = table.find_elements(By.TAG_NAME, "tr")
    for row in rows[1:]:  # 跳过表头行
        cols = row.find_elements(By.TAG_NAME, "td")
        row_data = [col.text for col in cols]
        # 将row_data存入列表或文件

    # 尝试点击下一页
    try:
        next_btn = wait.until(EC.element_to_be_clickable((By.XPATH, "//button[contains(text(), '下一页')]")))
        # 检查按钮是否禁用
        if "disabled" in next_btn.get_attribute("class"):
            break
        next_btn.click()
        # 等待页面刷新完成(旧表格元素失效则说明新数据加载)
        wait.until(EC.staleness_of(table))
    except:
        # 无下一页时退出循环
        break
  • 额外提示:若分页通过URL参数(如?page=2)实现,可直接构造URL循环请求,效率比模拟点击更高。

内容的提问来源于stack exchange,提问作者S.EB

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 23:05:25