首页 > 解决方案 > 将 onload 添加到元素而不在 Puppeteer 中执行

问题描述

我正在 Puppeteer 中编写一个网络爬虫。页面准备好后,我必须重写 HTML 并添加onload一些元素。

然而,Puppeteer 实际执行了该onload事件。

原始元素:<link rel="stylesheet" href="style.css"/>

在 Puppeteer 中,使用page.evaluate方法我将以下内容运行到相应的元素:

elem.setAttribute('rel', 'preload');
elem.setAttribute('as', 'style');
elem.setAttribute('onload', "this.rel='stylesheet'");

预期输出:<link rel="preload" as="style" href="style.css" onload="this.rel='stylesheet'" />

实际输出:<link rel="stylesheet" as="style" href="style.css" onload="this.rel='stylesheet'"/>

有没有办法onload在 Puppeteer 中防止这种情况或以某种方式使其工作?

另一种解决方案是在Cheerio之类的 HTML 解析器中完成这部分工作。

标签: javascriptnode.jspuppeteer

解决方案


打开页面后,立即设置page.setOfflineMode。这将防止从预加载中加载该样式,从而停止onload事件!

代码:

await page.goto(url, {
    waitUntil: 'networkidle2',
});

await page.setOfflineMode(true);

推荐阅读