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

使用Selenium爬取JS渲染的网页表格数据失败求助

解决Selenium无法获取JavaScript渲染表格数据的问题

看起来你已经选对了工具方向——用Selenium处理JS渲染的页面,但没拿到目标表格,大概率是等待策略不到位或者一些容易忽略的细节拖了后腿。我帮你拆解下可能的原因和具体解决办法:

常见问题排查与修复步骤

1. 把隐式等待换成更精准的显式等待

你代码里用的implicitly_wait(3)是全局隐式等待,它只会等待元素被DOM识别,不一定等JS把表格内容完全渲染出来。对于动态生成的表格,更靠谱的是用显式等待,直到目标表格元素(比如<table>标签或它的父容器)加载完成再去获取页面源码。

举个实用的代码示例,你可以根据实际的表格选择器调整:

import requests
from bs4 import BeautifulSoup as bs
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 把Driver初始化放在循环外面,不用每次循环都新建浏览器实例
driver = webdriver.Chrome(r'C:\Python_Study\chromedriver.exe')
wait = WebDriverWait(driver, 10)  # 最多等待10秒,可根据页面加载速度调整

for url in Url_Number:
    Real_url = 'http://www.sbiz.or.kr/sijangtong/nation/onnuri/pop/onnuriShopListPopup.do?cpage=1&amp;mkt_cd=100101&amp;mkt_gubun=O&amp;shop_table=SJTT.MKT_ELE_SHOP'
    driver.get(Real_url)
    
    # 显式等待表格元素出现,这里用通用的table标签,你可以替换成更精准的选择器(比如ID、class)
    wait.until(EC.presence_of_element_located((By.TAG_NAME, "table")))
    
    # 现在再获取页面源码,就能拿到JS渲染后的表格了
    html = driver.page_source
    print(html)

# 循环结束后记得关闭浏览器,释放资源
driver.quit()

2. 检查ChromeDriver与浏览器版本是否匹配

如果你的Chrome浏览器和ChromeDriver版本不兼容,会直接导致页面渲染异常,拿不到JS生成的内容。你可以:

  • 打开Chrome,在chrome://settings/help查看浏览器版本
  • 下载对应版本的ChromeDriver替换现有文件

3. 确认目标表格是否嵌套在iframe里

有些网站会把内容放在<iframe>标签中,这种情况下你必须先切换到iframe才能访问里面的元素:

  1. 打开页面开发者工具(F12),在Elements面板里搜索目标表格,看它是否在<iframe>标签内部
  2. 如果是,先切换iframe再操作:
# 等待iframe加载完成并切换
iframe = wait.until(EC.presence_of_element_located((By.TAG_NAME, "iframe")))
driver.switch_to.frame(iframe)

# 之后再等待表格元素,获取源码
wait.until(EC.presence_of_element_located((By.TAG_NAME, "table")))
html = driver.page_source

4. 别重复创建Driver实例

你原来的代码每次循环都新建一个webdriver.Chrome()实例,不仅效率极低,还会残留大量浏览器进程,甚至干扰页面渲染。把Driver初始化移到循环外,循环结束后统一关闭才是正确做法。

额外小技巧

  • 不用打印整个页面源码,直接定位表格元素获取HTML更高效:driver.find_element(By.TAG_NAME, "table").get_attribute('outerHTML')
  • 可以打开开发者工具的Network面板,看看表格数据是不是通过AJAX接口获取的——如果能直接抓这个接口,效率比用Selenium更高(但如果网站有反爬,Selenium还是更稳妥的选择)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 13:47:32