我运行了以下代码:
await page.goto("http://github.com/", { "waitUntil": "networkidle2" });
let divs = await page.evaluate(() => $("div"));
但是这会引发以下错误:
Error: Evaluation failed: ReferenceError: $ is not defined
。
但是当我检查时,它被定义为:
答案 0 :(得分:1)
$()
不是JS中的标准函数,它只是Chrome devtools中的帮助者(page.evaluate
与Chrome Devtools的环境不同):
注意:此API仅在控制台本身内可用。您无法从页面上的脚本访问命令行API。
您应该使用document.querySelector()
。
以下是工作示例:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('http://github.com/', { waitUntil: 'networkidle2' });
const textOfFirstDiv = await page.evaluate(
() => document.querySelector('div').textContent
);
console.log(textOfFirstDiv);
await browser.close();
})();
修改
你选择了一个不幸的例子来解释你的问题。如果你想从页面中提取JS值,就像这样(维基百科在Geo
对象中有自定义window
值)
await page.goto('https://en.wikipedia.org');
const geo = await page.evaluate(() => Geo);
console.log(geo);