【发布时间】:2021-02-27 03:55:37
【问题描述】:
我有一些 URL 参数需要通过查询字符串传递给 Puppeteer。除非我在调用 .evaluate() 函数之前定义必要的变量,否则一切正常。例如,如果我获取 URL 的参数,为特定参数创建一个变量,运行 .evaluate(),然后尝试访问其中返回未定义的变量。
这是一个例子
const testurl = 'https://example.com/app.js?&url=https://example.com/pagetocrawl.html&elements=.links'
const params = new URLSearchParams(testurl);
const url = params.get('url');
const elements = params.get('elements');
const networkidle = 'networkidle2';
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto(url, {waitUntil: networkidle});
pageitems = await page.evaluate(() => {
let results;
let items = document.querySelectorAll(elements);
items.forEach((item) => {
results += item.innerHTML;
});
return results;
});
上面的代码总是返回一个错误,指出元素变量未定义。如果我尝试在 evaluate() 调用中声明它,那么它会说 params 是未定义的,所以除非我知道要查找的元素而不必从 URL 中获取它,否则我无法抓取页面。我尝试将评估(()=>更改为评估((参数)=>,然后声明元素变量,但这导致错误提示“无法读取未定义的属性'get'。”如何在评估之外定义变量( ) 函数并能够在其中访问它们?现在我能想到的下一件事是再次调用以获取 evaluate() 函数中的当前 URL,基于此创建一个新的 params 变量,然后创建一个新的元素变量,它从新的 params 变量中获取其值。
【问题讨论】:
标签: javascript node.js puppeteer