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)
但是,它只在控制台中返回以下内容,而不是我想要的简单对象;
不确定我是否以正确的方式解决这个问题,因此非常感谢任何帮助/建议。
我遇到了同样的问题,因为 Puppeteer 与页面异步交互,所以我遇到了计时问题。在页面中添加 waitForFunction 对我有用。
await page.waitForFunction(() => window.objectOnMyWindow !== undefined);
const objectOnMyWindow = await page.evaluate(() => window.objectOnMyWindow);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10266 次 |
最近记录: |