我正在使用 node.js 和 puppeteer 来获取一些数据。不过,我只想从目标表中获取某些记录......更具体地说,记录带有 insideText: 'file. .........idx'.
下面显示了我的查询:
const tableRows = await page.$$('table > tbody tr');
console.log(tableRows.length);
let tableCell01;
let tableCell01Val;
for (let i=1; i < tableRows.length; i++){
tableRow = tableRows[i];
tableCell01 = await tableRow.$('td:nth-child(1) a');
tableCell01Val = await page.evaluate( tableCell01 => tableCell01.href, tableCell01 );
console.log('\n');
console.log(tableCell01Val);
}
这里未经过滤的输出是:
控制台:
6
file.20180702.idx
file.20180703.idx
file.20180705.idx
sitemap.20180702.xml
sitemap.20180703.xml
sitemap.20180705.xml
所以期望的结果应该是:
控制台:
3
file.20180702.idx
file.20180703.idx
file.20180705.idx
最好的方法是什么?最好是在循环之前进行过滤...以获得正确的 tableRows.length
最佳答案
您可以使用page.$x()
在选择行之前使用 XPath 表达式检查 href
属性的值:
const tableRows = await page.$x( '//table/tbody/tr/td[1]/a[starts-with(@href, "file.")]/../..' );
结果:
3
file.20180702.idx
file.20180703.idx
file.20180705.idx
关于javascript - Node.js puppeteer - 如何从表中仅获取某些(过滤器)记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52119858/