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

求助:使用Selenium WebDriver将HTML表格转为JSON数据(JS)

搞定HTML表格转JSON的实用指南

嘿,作为编程和JavaScript新手,你能成功抓取到表格数据已经超棒了!把表格转成JSON其实就是把表头和每行数据做对应映射的过程,我给你一步步拆解,附上手就能用的代码示例:

步骤1:定位表格并提取表头

首先得拿到表格的表头文本,这些文本会作为JSON对象的键:

var webdriver = require('selenium-webdriver'),
    By = webdriver.By,
    until = webdriver.until;

async function convertTableToJson() {
  // 初始化WebDriver(这里以Chrome为例)
  const driver = new webdriver.Builder().forBrowser('chrome').build();
  
  try {
    await driver.get('你的目标网页URL');
    
    // 定位目标表格(如果页面有多个表格,建议用更精准的选择器,比如By.id('目标表格ID'))
    const table = await driver.findElement(By.tagName('table'));
    
    // 获取所有表头<th>元素,提取文本内容
    const headerElements = await table.findElements(By.tagName('th'));
    const headers = await Promise.all(headerElements.map(header => header.getText()));

步骤2:遍历表格行,匹配表头与单元格数据

接下来遍历每一行数据,把每个单元格的文本和对应的表头绑定成键值对:

// 获取表格主体的所有数据行(优先取<tbody>里的<tr>,避免把表头行算进去)
    const rowElements = await table.findElements(By.css('tbody tr'));
    
    const tableData = [];
    for (const row of rowElements) {
      // 获取当前行的所有<td>单元格
      const cellElements = await row.findElements(By.tagName('td'));
      const rowData = {};
      
      // 逐个匹配表头与单元格文本,生成JSON对象的键值对
      for (let i = 0; i < headers.length; i++) {
        // 兼容空单元格的情况,避免报错
        rowData[headers[i]] = cellElements[i] ? await cellElements[i].getText() : '';
      }
      
      tableData.push(rowData);
    }

步骤3:转换为JSON格式并输出

最后把数组转成格式化的JSON字符串就大功告成了:

// 转换为带缩进的JSON字符串(方便阅读和调试)
    const jsonResult = JSON.stringify(tableData, null, 2);
    console.log('转换后的JSON数据:');
    console.log(jsonResult);
    
    // 要是需要保存到本地文件,直接用fs模块就行(记得先引入const fs = require('fs'))
    // fs.writeFileSync('table-data.json', jsonResult);
  } catch (error) {
    console.error('转换过程出错啦:', error);
  } finally {
    await driver.quit();
  }
}

// 执行转换函数
convertTableToJson();

新手友好提示

  • 如果你的表格没有<thead>或<tbody>标签,直接用table.findElements(By.tagName('tr')),但要记得跳过第一行(表头行),比如const rowElements = await table.findElements(By.tagName('tr')); rowElements.slice(1)
  • 要是遇到合并单元格(colspan/rowspan)的复杂表格,需要额外处理逻辑,但先从普通表格入手会更轻松
  • Selenium的元素操作全是异步的,所以一定要用await,代码必须放在async函数里哦

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:24:47