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

如何在Puppeteer与Node.js中提取表格单元格的href属性

提取表格单元格中a标签的href属性(Puppeteer + Node.js)

你需要在$$eval的回调逻辑里直接定位td内的<a>元素,读取它的href属性,而非获取整个innerHTML。同时要处理单元格内无a标签的情况,避免报错。

修改后的完整代码如下:

const puppeteer = require("puppeteer"); // 修正原代码拼写错误:pupperteer → puppeteer

async function run() {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto("https://en.m.wikipedia.org/wiki/2022_FIFA_World_Cup_Group_A")

    const myArray = await page.$$eval("table[class*='sortable']", (elements) => // 补全原代码缺失的选择器闭合引号
        elements.map((tableRow) => {
            const targetTd = tableRow.getElementsByTagName("td")[3];
            // 处理td或a标签不存在的情况,避免运行报错
            if (!targetTd) {
                return { cellText: "", url: "" };
            }
            const linkElement = targetTd.querySelector("a");
            return {
                cellText: targetTd.innerText.trim(),
                url: linkElement ? linkElement.getAttribute('href') : ""
            };
        })
    );

    console.log(myArray);

    await browser.close();
}

run();

关键修改说明:

  • 修正原代码的拼写错误和选择器语法问题
  • 增加空值判断逻辑:先检查目标td是否存在,再检查td内的a标签是否存在,避免运行时抛出异常
  • 直接提取href属性:通过querySelector('a')定位链接元素,用getAttribute('href')获取相对路径,完全匹配你需要的结果格式
  • 对cellText做trim()处理,去除多余空白字符

运行后你会得到符合预期的输出:

{
    cellText: 'AFC',
    url: "/wiki/Asian_Football_Confederation"
},
// 其他符合要求的条目

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 23:41:29