请问朋友们 puppeteer 的一个Nodejs相关问题

发布于 1周前 作者 itying888 来自 nodejs/Nestjs

请问朋友们 puppeteer 的一个Nodejs相关问题

请问 puppeteer 能不能 在 page goto 一个非标准 scheme 的 uri 时做 interception 代码如下,无法在 page.on(‘request’, xxx)中监听到 request。 而是直接报错

const puppeteer = require('puppeteer-core');
const findChrome = require('./findChrome');

(async ()=>{
    const { executablePath, type } = await findChrome({});
    if (!executablePath) {
      console.error('Could not find Chrome installation, please make sure Chrome browser is installed from https://www.google.com/chrome/.');
      process.exit(0);
      return;
    }
  
    const browser = await puppeteer.launch({
        executablePath,
        headless: false,
        defaultViewport: null,
        userDataDir: '.local-data',
    });
    let pages = await browser.pages();
    let page = pages[0];
    page.on('request', (request)=>{
        console.log(request); // 👈 到达不了这里
        request.continue();
    });
    page.on('requestfinished', (request)=>{
        console.log(request);
    })
    await page.setRequestInterception(true);
    try{
        await page.goto('app://index.html');
    }catch(err){
        console.error(err);
    }
})();

报错信息:

Error: net::ERR_ABORTED at app://index.html

6 回复

我是这样处理的,在调用之前会先对 url 做校验和过滤,不合法的 url 不调用


请教一下,findChrome 文件里是什么逻辑啊

搜到了, carlo
https://github.com/GoogleChromeLabs/carlo

npm i carlo
const findChrome = require(’./node_modules/carlo/lib/find_chrome’);

我本意是想访问一个不合法的 url,因为 scheme 不是标准的 scheme,但是因为 根本不会发出请求,所以不会进入请求回调,我想这么做的原因主要是因为之前在用 electron 的时候,它提供了 Protocol 模块来手动注册非标准的 scheme,这样可以在不开服务器的情况下适配许多前端的路由问题

好的 感谢🙏

针对你提到的Puppeteer在Node.js中的相关问题,以下是一些可能的解答及示例代码:

Puppeteer是一个Node库,它提供了一个高级API来控制Chrome或Chromium浏览器。以下是使用Puppeteer在Node.js中进行网页抓取的示例:

  1. 安装Puppeteer

    在Node.js项目中,首先需要安装Puppeteer。你可以使用npm来安装:

    npm install puppeteer
    
  2. 使用Puppeteer抓取网页

    下面是一个简单的示例,展示如何使用Puppeteer抓取一个网页的内容:

    const puppeteer = require('puppeteer');
    
    (async () => {
        const browser = await puppeteer.launch();
        const page = await browser.newPage();
        await page.goto('https://www.example.com');
        const content = await page.content();
        console.log(content);
        await browser.close();
    })();
    

    这段代码会启动一个浏览器实例,打开指定的URL,获取页面内容,并将其打印到控制台。

  3. 注意事项

    • 确保你的Node.js环境已经正确安装。
    • Puppeteer需要下载Chromium二进制文件,因此安装过程可能会比较缓慢。你可以通过设置环境变量或使用国内镜像源来加速下载。
    • 在进行网页抓取时,请遵守相关法律法规和网站的使用条款。

希望这些信息对你有所帮助!如果你有更具体的问题或需要进一步的帮助,请随时提问。

回到顶部