Javascript Node.js Puppeter-如何仅从表中获取某些(筛选)记录

Javascript Node.js Puppeter-如何仅从表中获取某些(筛选)记录,javascript,node.js,puppeteer,Javascript,Node.js,Puppeteer,我正在使用node.js和puppeter获取一些数据。但是,我只想从目标表中获取某些记录。更具体地说,使用innerText:“文件…”的记录。idx’ 下面显示了我的查询: const tableRows = await page.$$('table > tbody tr'); console.log(tableRows.length); let tableCell01; let tableCell01Val; for (let i=1; i < tableRows.leng

我正在使用node.js和puppeter获取一些数据。但是,我只想从目标表中获取某些记录。更具体地说,使用innerText:“文件…”的记录。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,您可以在选择行之前使用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
在选择行之前,可以使用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
我将使用(根据选择器匹配的元素数组计算函数)。这将在对浏览器的一次调用中完成所有必需的操作

伪代码(假设所有第一个子
td
s都有一个
a
child):

我将使用(根据选择器匹配的元素数组计算函数)。这将在对浏览器的一次调用中完成所有必需的操作

伪代码(假设所有第一个子
td
s都有一个
a
child):


我认为没有必要为此使用XPath。我更喜欢使用CSS选择器。@jnylen对我来说似乎是个绝佳的机会。不必过于复杂。这可能只是个人喜好,但我喜欢使用内置于浏览器、CSS、JS等中的“标准”查询语言,而不是添加另一种语言。@jnylen您有权选择您的个人喜好。我认为没有必要为此使用XPath。我更喜欢使用CSS选择器。@jnylen对我来说似乎是个绝佳的机会。无需过分复杂。这可能只是个人喜好,但我喜欢使用内置于浏览器、CSS、JS等中的“标准”查询语言,而不是添加其他语言。@jnylen您有权选择自己的喜好。