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

动态网站表格数据爬取失败求助

动态网站表格数据爬取失败求助

嘿,我来帮你排查下爬取这个表格数据的问题~

你目前的代码里有几个容易踩的坑,我给你拆解下:

首先,你用By.CLASS_NAME传入"tdStone odd"是不对的哦!因为tdStone和odd是两个独立的CSS类名,By.CLASS_NAME一次只能指定单个类名,带空格的话Selenium会识别成无效的类名,自然找不到元素。

另外,这个网站是动态加载的,直接调用find_elements可能会因为元素还没渲染完成就执行查找,导致返回空列表。咱们得加上显式等待,确保元素加载好再去抓取。

给你调整后的代码参考:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 初始化Chrome驱动
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))

# 打开目标网页
url = "https://www.diamondsfactory.co.uk/design/combined-band-look-diamond-engagement-ring-clrn0717801"
driver.get(url)

try:
    # 显式等待,最多等10秒,直到带tdStone类的元素加载完成
    # 如果要找同时带tdStone和odd的行,用CSS选择器".tdStone.odd"
    # 如果要找所有tdStone的行,就用".tdStone"
    rows = WebDriverWait(driver, 10).until(
        EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".tdStone.odd"))
    )

    # 提取每一行的文本内容
    for row in rows:
        print(row.text)
finally:
    # 记得关闭浏览器
    driver.quit()

再给你几个小提醒:

  • 如果要抓取整个表格的所有行,不管是odd还是even样式的,把CSS选择器改成".tdStone"就行,这样能覆盖所有石头相关的行
  • 要是页面需要滚动才能加载出表格,还得加上滚动操作,比如driver.execute_script("window.scrollTo(0, document.body.scrollHeight);"),不过先试试上面的代码,大概率能解决问题

备注:内容来源于stack exchange,提问作者user25346712

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 14:58:10