@browserles/capture:使用tabCapture API记录一个Puppeteer页面.
安装
npm install @browserless/capture --save
使用量
const createBrowser = require('browserless')
const createCapture = require('@browserless/capture')
const withCaptureExtension = (launchOpts = {}) => {
const ignoreDefaultArgs = launchOpts.ignoreDefaultArgs
return {
...launchOpts,
args: [
...(launchOpts.args || []),
`--allowlisted-extension-id=${createCapture.extensionId}`,
`--disable-extensions-except=${createCapture.extensionPath}`,
`--load-extension=${createCapture.extensionPath}`
],
ignoreDefaultArgs:
ignoreDefaultArgs === true
? true
: [
...new Set([
...(Array.isArray(ignoreDefaultArgs) ? ignoreDefaultArgs : []),
'--disable-extensions'
])
]
}
}
const browser = createBrowser(withCaptureExtension({ headless: 'new' }))
const browserless = await browser.createContext()
const puppeteerBrowser = await browserless.browser()
const page = await puppeteerBrowser.defaultBrowserContext().newPage()
const capture = createCapture({ goto: browserless.goto })
const video = await capture(page)('https://example.com', {
duration: 5000,
type: 'mp4',
codec: 'avc1.4D401F',
path: '/tmp/demo.mp4'
})
await page.close()
await browserless.destroyContext()
await browser.close()
browserless 核心不会自动注入抓取扩展旗.
@browserless/capture 要求:
- 正在使用捆绑的扩展装入
--allowlisted-extension-id, (中文(简体) ),--disable-extensions-except,以及--load-extension。 。 。 . - 确保铬默认参数
--disable-extensions被忽略. - 创建抓取的页面
defaultBrowserContext()(不是隐形语境).
API 形状有意简单,类似于 page.screenshot()编号 :page.pdf()数字 :
const capture = createCapture({ goto })
await capture(page)(url, opts)
回返a Buffer 写到 opts.path 提供时.
选项
捕获模式由 进入点而不是一个选择.
| 选项 | 类型 | 默认 | 说明 |
|---|---|---|---|
type | 'webm' | 'mp4' | 'mp4' | 输出类型选择器映射到 Media Recorder mime 类型 . |
codec | string | 取决于 type | Media Recorder 代码控制器 。 默认 : webm -> vp9, (中文(简体) ), mp4 -> avc1.4D401F。 。 。 . |
path | string | undefined | 将捕获的媒体写入磁盘. |
duration | number | 5000 | 捕捉时间以毫秒计. |
audio | boolean | object | false | 获取音频。 当对象时,它被用作音频轨道限制. |
video | boolean | object | true | 抓取视频. 当对象时,它被用作视频轨道限制. |
模式
每个捕捉模式都是一个单独的切入点,所以只拉入您使用的
(例如: extension 模式不装入基于 ffmpeg 的道具 :
const createCapture = require('@browserless/capture') // extension (default)
const createCapture = require('@browserless/capture/screencast')
const createCapture = require('@browserless/capture/screenshot')
三者都拥有相同的工厂签名—— createCapture({ goto })(page)(url, opts)。 。 。 .
| 入境点 | 怎么样 | 页:1 |
|---|---|---|
@browserless/capture (单位:千美元)/extension(中文(简体) ) | 通过捆绑的扩展线浏览器媒体反馈指令( E)tabCapture) (中文(简体) ). | 默认. 设备像素(视网膜)输出. 捕获 audio。 。 。 . |
@browserless/capture/screencast | 发展政策委员会 Page.startScreencast 框被粘入 ffmpeg . | 仅录相( E)video: false - 扔下来). CSS-像素输出. 要求数 ffmpeg。 。 。 . |
@browserless/capture/screenshot | 保龄球 page.screenshot 框被粘入 ffmpeg . | 仅录相. 唯一能捕捉加速地层的模式(WebGL/canvas/video). 设备像素输出,以截图间隔为界. 要求数 ffmpeg。 。 。 . |
出口
capture.extensionPath: 捆绑扩展的绝对路径.capture.extensionId:软件包使用的扩展ID.capture.MODES: 可用捕获模式的名称(入站点).capture.types: 支持的数值type。 。 。 .
capture 用途 goto(...).device.viewport 作为捕捉取取景器。 何时 video 实值 true 或省略,从该取景口推断出视频限制,从而设定匹配截图和PDF。 通过对象 video 或者说 audio 给自己设置这些限制.
推断的制约因素包括: deviceScaleFactor,因此输出像素符合截图密度.
type 映射到 Media Recorder MIME 类型的地图. codec 附录为 ;codecs=...默认为 vp9 页:1 webm 财务报告和审定财务报表 avc1.4D401F 页:1 mp4以 opts.codec数字 :
await capture(page)(url, { type: 'webm', codec: 'vp8' })
await capture(page)(url, { type: 'mp4', codec: 'avc1.640033' })
何时 type 实值 'mp4', Chromium 必须支持 MP4 Media Recorder 输出. 对于无头模式下的截图/贴子平分,启动Chrome并配对 --screen-info。 。 。 .
许可证
@ 浏览/ 抓取 © 微链接,在 麻省理工学院 执照.
作者和维护者 微链接 由来自 捐助者。 。 。 .
微链接.io • GitHub 软件 微链克 • X @microlinkhq (英语)