我试图在 puppeteer 的帮助下从网站获取一些链接。
async function getLinks(){
const first = 'first';
const last = 'last';
const browser = await browserControl.startBrowser();
const page = await browser.newPage();
await page.goto(url_baseStats);
// await page.waitForNavigation();
let links = await page.evaluate((first, last) => {
try {
let links = Array.from(document.querySelectorAll('a'), a => a.getAttribute('href'));
links = links.slice(links.indexOf(first), links.indexOf(last));
return links;
} catch(err) {
throw err;
}
});
console.log("links:", links);
return links;
}
我有两个问题:
当我运行调试器时,他进入“await page.evaluate((...”-point 然后跳转 直接到“console.log(...”。他为什么不等?
为什么我需要将变量 first 和 last 作为参数传递给评估函数? 我上面定义了它们,它们应该在评估函数的范围内?!?
提前致谢;_)
答案 0 :(得分:1)
仅供后来的观众,评论摘要:
在 page.evaluate() 函数中运行的所有内容都是在浏览器页面的上下文中完成的。该脚本在浏览器中运行,而不是在 node.js 中运行。因此,一些常用的 js 规则在这里无效。 例如:
;_)