如何在无头镀铬中获得变量的值?

时间:2018-03-03 06:38:34

标签: puppeteer

我运行了以下代码:

await page.goto("http://github.com/", { "waitUntil": "networkidle2" });
let divs = await page.evaluate(() => $("div"));

但是这会引发以下错误:

Error: Evaluation failed: ReferenceError: $ is not defined

但是当我检查时,它被定义为:

enter image description here

1 个答案:

答案 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);