繁体   English   中英

Puppeteer - 将变量传递给 page.evaluate()

[英]Puppeteer - Passing a variable to page.evaluate()

我正在尝试使用 Puppeteer 在页面上抓取一堆表格,但表格的数量每次都不同,因此我需要将一个变量传递给 page.evaluate() function。

我有一个包含我需要使用的变量的数组,但可以说我想使用变量手动检查第二个表,这就是我最初解决问题的方式:

const x = 2
let value = await page.evaluate(() =>
document.querySelector("#pageBody > div:nth-child(" + x + ") > table > tr > td").innerText
);
console.log(value);

//Evaluation failed: ReferenceError: x is not defined

经过一些研究,据我了解,传递变量的正确方法是:

const x = 2;
let value = await page.evaluate((x) => { 
document.querySelector("#pageBody > div:nth-child(" + x + ") > table > tr > td").innerText 
}, x);
console.log(value);

//value = undefined

但是由于我没有得到我想要的结果,所以我做错了或没有正确理解。 有任何想法吗?

弄清楚了。 当然,在经过数小时的挫折后发布到 SO 5 分钟后,但这里是:

const x = 2;
let value = await page.evaluate((x) => { 
return Promise.resolve(document.querySelector("#pageBody > div:nth-child(" + x + ") > table > tr > td").innerText) 
}, x);
console.log(value);

我只是添加这个来解决一些混乱,如果你用单行箭头 function 你不需要返回:

const css = "#pageBody > div:nth-child(" + x + ") > table > tr > td"
let value = await page.evaluate((css) => document.querySelector(css).innerText), css);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM