如何在 puppeteer 上迭代选择器

How to iterate selector over puppeter

亲爱的大家,我对 puppeter 中的选择器有疑问。

我有这个代码。

for(var k= 0 ; k<= 21 ; k++) {
  const text = await page.evaluate(() => {
    document.querySelector(
      'div.ui-table__row:nth-child('+k+') > a:nth-child(1) > div:nth-child(2)'
    ).textContent
  })
  console.log(text);            
}

当我尝试执行此代码段时出现的问题是我没有定义 k 但我认为这是正确的。

 Error: Evaluation failed: ReferenceError: k is not defined

我该如何解决这个问题? 问候

k 需要显式 passed/injected 到 evaluate()

const k = 'foo'
await page.evaluate(k => {...}, k)

更改为:

for(var k= 0 ; k<= 21 ; k++) {
  const text = await page.evaluate((nth) => {
    document.querySelector(
      'div.ui-table__row:nth-child('+nth+') > a:nth-child(1) > div:nth-child(2)'
    ).textContent
  }, k)
  console.log(text);            
}

根据此 document,您必须像这样将变量作为参数传递给 page.evaluate

const result = await page.evaluate((x) => { // 1. Define "x" to get value in the step 2
  return Promise.resolve(8 * x); // 3. Return the result
}, 7); // 2. Pass 7 to "x"
console.log(result); // prints "56"

您的代码段将如下所示:

for(let k = 0; k <= 21; k++) {
  const text = await page.evaluate((nth) => {
    return document.querySelector(
      'div.ui-table__row:nth-child('+ nth +') > a:nth-child(1) > div:nth-child(2)'
    ).textContent; // Return `textContent` to "out side"
  }, k)
  console.log(text);            
}