如何在 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);
}
亲爱的大家,我对 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);
}