browserless提供了hooks 能力,默认实现都为空,以下简单说明下内部处理

默认实现

如下图

browserless hooks 简单说明_docker

内部处理

  • hooks.ts 定义
import {
  AfterResponse,
  BeforeRequest,
  BrowserHook,
  PageHook,
} from '@browserless.io/browserless';
import { EventEmitter } from 'events';
 
// KEPT for backwards compatibility reasons since some downstream
// docker images will override these files to inject their own hook
// behaviors
// @ts-ignore
import { default as afterRequest } from '../external/after.js';
// @ts-ignore
import { default as beforeRequest } from '../external/before.js';
// @ts-ignore
import { default as browserHook } from '../external/browser.js';
// @ts-ignore
import { default as pageHook } from '../external/page.js';
 
export class Hooks extends EventEmitter {
  before(args: BeforeRequest): Promise<boolean> {
    return beforeRequest(args);
  }
 
  after(args: AfterResponse): Promise<unknown> {
    return afterRequest(args);
  }
 
  page(args: PageHook): Promise<unknown> {
    return pageHook(args);
  }
 
  browser(args: BrowserHook): Promise<unknown> {
    return browserHook(args);
  }
 
  /**
   * Implement any browserless-core-specific shutdown logic here.
   * Calls the empty-SDK stop method for downstream implementations.
   */
  public shutdown = async () => {
    await this.stop();
  };
 
  /**
   * Left blank for downstream SDK modules to optionally implement.
   */
  public stop = () => {};
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
AfterResponse,
  • 1.
  • 使用

如下图,可以看到不少地方都有使用到,核心就是对于几个hooks 的调用

browserless hooks 简单说明_参考资料_02

说明

默认hooks 是放在external 文件夹中的几个文件,如果我们希望自己扩展,就可以重写几个实现,对于基于docker 部署的,直接进行文件替换

参考资料

src/hooks.ts
 https://docs.browserless.io/
 https://github.com/browserless/browserless