如何在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
相关产品推荐
相关产品推荐

