javascript - Node.js puppeteer - 如何从表中仅获取某些(过滤器)记录

标签 javascript node.js puppeteer

我正在使用 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/

相关文章:

javascript - 使用 Cropper js 裁剪后图像质量降低

javascript - Nock 不返回设置的 header

css-selectors - Puppeteer如何点击 'next sibling'的子元素

node.js - Puppeteer 查找数据使用情况

node.js - node.js --trace-gc 输出的含义是什么?

vue.js - 如何在 vue.js 中使用 puppeteer

javascript - 来自 mainConfigFile 的 RequireJS 优化器不工作

javascript - jQuery datepicker 仅加载由 JavaScript 添加的第一个项目

javascript - 开发一个 Chrome 扩展来覆盖自签名证书的 SSL 证书异常

node.js - 如何在不共享 key 的情况下执行AWS S3分段上传