使用Puppeteer检索JS对象

时间:2019-03-14 11:40:19

标签: javascript node.js puppeteer

我希望有人可以指引我正确的方向,我试图通过Puppeteer在页面上检索对象。

如果我在Web控制台中键入以下内容,它将起作用:

eval('__object.client[0]');

如果我尝试在Puppeteer中执行以下操作,这将很好地工作:

await page.exposeFunction('findPath', (search) => {
    console.log(eval('__object.client[0]'));
});

它不检索对象,而是检索字符串。

我做错了什么?

谢谢。

1 个答案:

答案 0 :(得分:0)

我认为您必须记住一些概念:

exposeFunction将不会执行该功能。它将注册该功能,因此您可以随后在浏览器上下文中调用findPath(foo) 。 您在公开函数中运行的代码将在您的应用程序上下文中运行。因此eval在那里将无法使用。

evaluate应该为您完成工作:

console.log(await page.evaluate(() => {
   return eval('document.title');
}));

使用evaluate时必须记住,代码将在浏览器上下文中执行。因此,您将不会在应用程序端读取任何控制台日志(除非您监听日志事件)。