# renderer 工具类

Adachi-BOT 在启动之初会借助 Puppeteer (opens new window) 伴随后台无头模式启动一个 chromium 浏览器。

renderer 工具类则负责控制这个浏览器以进行截图或是其他定制化的操作。

翻阅 工具类 Renderer API 来查看工具类所包含的所有方法。

# 渲染实例

为了简化渲染页面内容输出为图片的操作,我们提供了一个封装了部分方法的渲染类。可通过 register() 方法来注册得到一个渲染实例。

import bot from "ROOT";

// 得到渲染实例
const render = bot.renderer.register( "/test-plugin", "#app" );

上面注册了一个渲染实例,调用该渲染实例的方法时,相对路径的目标将会基于基地址 /test-plugin,并默认选择 #app 元素进行渲染。

渲染实例提供了三个方法,可以以预设的方式输出图片,或是自定义输出图片逻辑。

# 预设方式

渲染实例中提供了 asBase64()asSegment() 预设方法。这两个方法将会访问指定的页面,并对指定元素进行截图,得到截图内容。

const image = await render.asSegment( "test.html" );

两种方法除返回值不同外并无区别,其中 asBase64() 得到图片的 base64 格式,可用于进行其他二次封装操作。asSegment() 则得到可直接用于 bot 发送的图片消息内容。

# 自定义方式

如果预设方法不能满足开发者的需求。可以使用 asForFunction() 来自行决定渲染输出方式。

asForFunction() 将会先访问指定的页面,然后执行开发者提供的自定义方法来获取页面内容。

const image = await render.asSegment( "test.html", async page => {
    const element = await page.$( "#target" );
    const result = await element.screenshot( { encoding: "base64", type: "jpeg", quality: 100 } );
    return `base64://${ result }`;
} );

自定义方法接受一个 Page (opens new window) 对象参数,可自定义执行页面相关操作。

asForFunction() 将会把自定义方法的返回值原样返回。当自定义方法未返回任何内容时,asForFunction() 返回空字符串 ""

# 操作浏览器

工具类同样提供了操作浏览器的相关方法。但除非特殊需要,我们并不建议开发者直接对浏览器进行操作。

# 获取浏览器实例

可以通过 launchBrowser() 获取浏览器实例。执行此方法时,若浏览器未启动则会先尝试启动浏览器(正常情况下 bot 的浏览器会一直在后台运行),反之直接返回浏览器实例。

开发者可以通过此浏览器实例来进行一些 Puppeteer (opens new window) 所提供的自动化操作。

import bot from "ROOT";

bot.renderer.launchBrowser().then( browser => {
    if ( browser ) {
        // 获取此 Browser 内所有打开页面的列表
        browser.pages();
    }
} )

当启动浏览器出错时,得到的浏览器实例对象 borwsernull

# 关闭与重启浏览器

closeBrowser()restartBrowser() 分别用于关闭与重启浏览器。如非必要,开发者不应操作此方法。

最后编辑于: 8/13/2023, 7:21:32 PM