【发布时间】:2023-03-17 09:11:01
【问题描述】:
我正在使用 Puppeteer.js 来抓取一些页面。目前,我使用jsdom 对DOM 执行大量查询。今天这是不可能的,你可以在下面的代码中看到,并在评论中解释:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({ headless: false });
const page = await browser.newPage();
// Instructs the blank page to navigate a URL
await page.goto('https://www.google.com/');
const result = await page.evaluate(() => {});
await browser.close();
})();
这里我有可用的“文档”对象。我想在这个范围之外评估它, 因为我在这里对 DOM 进行了很多调查,我不想在这里弄乱 puppeteer 代码。 我不能在这里调用任何外部函数。
const result = await page.evaluate(() => {});
今天,我需要导出所有的HTML页面,而不是这个, 并将其发送到其他文件中的 jsdom 等外部包:
const jsdom = require('jsdom');
const pageContent = await page.content();
const dom = new jsdom.JSDOM(pageContent);
const divs = dom.window.document.querySelectorAll('div');
// Rest of the long investigation here.
我需要什么?
const dom = await page.contentDOM();
const divs = dom.window.document.querySelectorAll('div');
// Rest of the long investigation here.
所以基本上,我的问题是,Puppeeter.js 中内置了一些函数,可以将文档根对象暴露在 page.evaluate 之外,这将允许我将文档移动到其他函数以调查那里的 DOM,或者我现在还需要使用外部包,比如jsdom?
试图在这里寻找答案:
Getting DOM node text with Puppeteer and headless Chrome
Using puppeteer how do you get all child nodes of a node?
Getting all styles with devtool-protocol in puppeteer
Get DocType of an HTML as string with Javascript
Handling events from puppeteer's page context outside evaluate method
Headless Chrome ( Puppeteer ) - how to get access to document node element?
我最近在 Puppeeter.js GitHub 页面上打开了问题,但没有答案:
https://github.com/puppeteer/puppeteer/issues/6667
提前致谢。
【问题讨论】:
标签: javascript node.js dom puppeteer