使用 puppeteer 返回窗口对象

ale*_*exc 6 chromium google-chrome-extension node.js web-scraping puppeteer

我试图从页面返回整个 windows 对象,然后遍历 puppeteer 之外的对象。

我正在尝试访问 Highcharts 属性中的数据,为此我需要访问 window 对象。正常的 javascript 代码类似于window.Highcharts.charts[0].series[0].data.

我认为最简单的方法是使用 puppeteer 访问该站点,然后将 windows 对象发回给我,然后我可以像任何其他 JS 对象一样在 puppeteer 之外使用它。

阅读文档后,我发现很难返回对象,因为它看起来只是将“窗口”放入 chrome 控制台。我不确定我错过了什么?

我已经阅读了文档,以下两种方法似乎应该有效?

(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto('https://www.example.com', {waitUntil: 'networkidle2'});

    // METHOD 1
    // Create a Map object
    await page.evaluate(() => window.map = new Map());
    // Get a handle to the Map object prototype
    const mapPrototype = await page.evaluateHandle(() => Map.prototype);
    // Query all map instances into an array
    const mapInstances = await page.queryObjects(mapPrototype);

    console.log(mapInstances);

    await mapInstances.dispose();
    await mapPrototype.dispose();

    // METHOD 2
    const handle = await page.evaluateHandle(() => ({window, document}));
    const properties = await handle.getProperties();
    const windowHandle = properties.get('window');
    const documentHandle = properties.get('document');
    var result = await page.evaluate(win => win, windowHandle);

    console.log(result)

    await handle.dispose();



    await browser.close();
})();
Run Code Online (Sandbox Code Playgroud)

但是,它只在控制台中返回以下内容,而不是我想要的简单对象;

在此处输入图片说明

不确定我是否以正确的方式解决这个问题,因此非常感谢任何帮助/建议。

Mül*_*ler 0

我遇到了同样的问题,因为 Puppeteer 与页面异步交互,所以我遇到了计时问题。在页面中添加 waitForFunction 对我有用。

await page.waitForFunction(() => window.objectOnMyWindow !== undefined);
const objectOnMyWindow = await page.evaluate(() => window.objectOnMyWindow);
Run Code Online (Sandbox Code Playgroud)