跳至主要内容
版本: 22.5.0

实验性 WebDriver BiDi 支持

WebDriver BiDi 是一种正在开发中的新型跨浏览器自动化协议,旨在结合 WebDriver “经典” 和 CDP 的优点。WebDriver BiDi 承诺双向通信,使其默认情况下速度更快,并且它还包含低级控制功能。

另请参阅

使用 Chrome 和 Firefox 自动化

Puppeteer 支持使用 Chrome 和 Firefox 进行 WebDriver BiDi 自动化。

Firefox 的集成正在接近与之前基于 CDP 的方法的功能一致。在专门的公告中了解更多信息。

衡量进度

为了评估 WebDriver BiDi 的功能,我们使用了全面的Puppeteer 测试套件

  • 对于 Firefox,目前有不到60个测试失败,而超过82个新测试成功地使用了 WebDriver BiDi,证明了其不断增长的潜力。
  • 对于 Chrome,大约 68% 的测试通过了 WebDriver BiDi,表明与基于 CDP 的方法相比,还有改进的空间。

入门

以下是使用 WebDriver BiDi 启动 Firefox 或 Chrome 的示例

import puppeteer from 'puppeteer';

const browser = await puppeteer.launch({
product: 'firefox', // or 'chrome'
protocol: 'webDriverBiDi',
});
const page = await browser.newPage();
...
await browser.close();

这是朝着更统一、更高效的跨浏览器自动化体验迈出的激动人心的一步。我们鼓励您使用 Puppeteer 探索 WebDriver BiDi,并加入我们一起塑造浏览器自动化的未来。

通过 WebDriver BiDi 支持的 Puppeteer 功能

  • 浏览器和页面自动化

    • Browser.close
    • Frame.goto()(除了 refererreferrerPolicy
    • Page.bringToFront
    • Page.goBack()
    • Page.goForward()
    • Page.goto(除了 refererreferrerPolicy
    • Page.reload(除了 ignoreCache 参数)
    • Page.setViewport(仅 widthheightdeviceScaleFactor
    • Puppeteer.launch
  • 脚本评估:

    • JSHandle.evaluate
    • JSHandle.evaluateHandle
    • Page.evaluate
    • Page.exposeFunction
  • 选择器定位器,除了 ARIA

    • Page.$(Chrome 支持 ARIA 选择器)
    • Page.$$(Chrome 支持 ARIA 选择器)
    • Page.$$eval(Chrome 支持 ARIA 选择器)
    • Page.$eval(Chrome 支持 ARIA 选择器)
    • Page.waitForSelector(Chrome 支持 ARIA 选择器)
  • 输入

    • ElementHandle.uploadFile
    • ElementHandle.click
    • Keyboard.down
    • Keyboard.press
    • Keyboard.sendCharacter
    • Keyboard.type
    • Keyboard.up
    • 鼠标事件(除了专用的拖放 API 方法)
    • Page.tap
    • TouchScreen.*
  • JavaScript 对话框拦截

    • page.on('dialog')
    • Dialog.*
  • 截图(并非所有参数都支持)

    • Page.screenshot(支持的参数 clipencodingfullPage
  • PDF 生成(并非所有参数都支持)

    • Page.pdf(仅支持 formatheightlandscapemarginpageRangesprintBackgroundscalewidth
    • Page.createPDFStream(仅支持 formatheightlandscapemarginpageRangesprintBackgroundscalewidth
  • 权限(仅在 Chrome 中支持)

    • BrowserContext.clearPermissionOverrides()
    • BrowserContext.overridePermissions()

Puppeteer 功能尚未通过 WebDriver BiDi 支持

  • 请求拦截

    • HTTPRequest.abort()
    • HTTPRequest.abortErrorReason()
    • HTTPRequest.client()
    • HTTPRequest.continue()
    • HTTPRequest.continueRequestOverrides()
    • HTTPRequest.failure()
    • HTTPRequest.finalizeInterceptions()
    • HTTPRequest.interceptResolutionState()
    • HTTPRequest.isInterceptResolutionHandled()
    • HTTPRequest.respond()
    • HTTPRequest.responseForRequest()
    • Page.setRequestInterception()
  • 各种模拟(大多数在 Chrome 中支持)

    • Page.emulate()(仅在 Chrome 中支持)
    • Page.emulateCPUThrottling()(仅在 Chrome 中支持)
    • Page.emulateIdleState()(仅在 Chrome 中支持)
    • Page.emulateMediaFeatures()(仅在 Chrome 中支持)
    • Page.emulateMediaType()(仅在 Chrome 中支持)
    • Page.emulateTimezone()(仅在 Chrome 中支持)
    • Page.emulateVisionDeficiency()(仅在 Chrome 中支持)
    • Page.setBypassCSP()(仅在 Chrome 中支持)
    • Page.setCacheEnabled()(仅在 Chrome 中支持)
    • Page.setGeolocation()(仅在 Chrome 中支持)
    • Page.setJavaScriptEnabled()(仅在 Chrome 中支持)
  • CDP 特定功能

    • Page.createCDPSession()(仅在 Chrome 中支持)
  • 跟踪(仅在 Chrome 中支持)

  • 覆盖率(仅在 Chrome 中支持)

  • 无障碍功能(仅在 Chrome 中支持)

  • 其他方法

    • Browser.userAgent()
    • Frame.isOOPFrame()
    • Frame.waitForDevicePrompt()
    • HTTPResponse.buffer()
    • HTTPResponse.fromServiceWorker()
    • HTTPResponse.securityDetails()
    • Input.drag()
    • Input.dragAndDrop()
    • Input.dragOver()
    • Input.drop()
    • Page.authenticate()
    • Page.cookies()
    • Page.deleteCookie()
    • Page.emulateNetworkConditions()
    • Page.isDragInterceptionEnabled()
    • Page.isJavaScriptEnabled()(仅在 Chrome 中支持)
    • Page.isServiceWorkerBypassed()
    • Page.metrics()
    • Page.queryObjects()(仅在 Chrome 中支持)
    • Page.screencast()(仅在 Chrome 中支持)
    • Page.setBypassServiceWorker()
    • Page.setCookie()
    • Page.setDragInterception()
    • Page.setExtraHTTPHeaders()
    • Page.setOfflineMode()
    • Page.setUserAgent()
    • Page.waitForDevicePrompt()
    • Page.waitForFileChooser()
    • Page.workers()
    • PageEvent.popup
    • PageEvent.WorkerCreated
    • PageEvent.WorkerDestroyed
    • Target.opener()