Skip to main content
Version: 24.38.0

WebDriver BiDi 支持

🌐 WebDriver BiDi support

WebDriver BiDi 是一种正在开发中的新型跨浏览器自动化协议,旨在结合 WebDriver “经典” 和 CDP 的优点。WebDriver BiDi 实现了双向通信,使其默认情况下速度很快,并且附带底层的控制功能。

使用 Chrome 和 Firefox 实现自动化

🌐 Automate with Chrome and Firefox

Puppeteer 支持使用 Chrome 和 Firefox 的 WebDriver BiDi 自动化。启动 Firefox 时,WebDriver BiDi 协议默认启用。启动 Chrome 时,仍然默认使用 CDP,因为 WebDriver BiDi 尚不支持所有 CDP 功能。如果某个 Puppeteer 功能尚不支持通过 WebDriver BiDi 使用,将抛出 UnsupportedOperation 错误。另请参见下面关于 WebDriver BiDi 支持内容的列表。

🌐 Puppeteer supports WebDriver BiDi automation with Chrome and Firefox. When launching Firefox with Puppeteer, the WebDriver BiDi Protocol is enabled by default. When launching Chrome, CDP is still used by default since not all CDP features are supported by WebDriver BiDi yet. If a certain Puppeteer feature is not supported over WebDriver BiDi yet, UnsupportedOperation error is thrown. Also see the lists below on what is supported with WebDriver BiDi.

开始使用

🌐 Get started

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

🌐 Below is an example of launching Firefox or Chrome with WebDriver BiDi:

import puppeteer from 'puppeteer';

const firefoxBrowser = await puppeteer.launch({
browser: 'firefox', // WebDriver BiDi is used by default.
});
const page = await firefoxBrowser.newPage();
...
await firefoxBrowser.close();

const chromeBrowser = await puppeteer.launch({
browser: 'chrome',
protocol: 'webDriverBiDi', // CDP would be used by default for Chrome.
});
const page = await chromeBrowser.newPage();
...
await chromeBrowser.close();

WebDriver BiDi 不支持 Puppeteer 功能

🌐 Puppeteer features not supported over WebDriver BiDi

  • 各种模拟
    • Page.emulate()
    • Page.emulateCPUThrottling()
    • Page.emulateIdleState()
    • Page.emulateMediaFeatures()
    • Page.emulateMediaType()
    • Page.emulateVisionDeficiency()
    • Page.setBypassCSP()
  • CDP 特定功能
    • HTTPRequest.client()
    • HTTPRequest.resourceType()
    • Page.createCDPSession()
  • Accessibility
  • Coverage
  • Tracing
  • 其他方法:
    • Frame.waitForDevicePrompt()
    • HTTPResponse.buffer()
    • HTTPResponse.content()
    • HTTPResponse.text()
    • HTTPResponse.fromServiceWorker()
    • HTTPResponse.securityDetails()
    • Input.drag()
    • Input.dragAndDrop()
    • Input.dragOver()
    • Input.drop()
    • Page.emulateNetworkConditions()
    • Page.isDragInterceptionEnabled()
    • Page.isServiceWorkerBypassed()
    • Page.metrics()
    • Page.queryObjects()
    • Page.screencast()
    • Page.setBypassServiceWorker()
    • Page.setDragInterception()
    • Page.setOfflineMode()
    • Page.waitForDevicePrompt()
    • PageEvent.popup

WebDriver BiDi 完全支持 Puppeteer 功能

🌐 Puppeteer features fully supported over WebDriver BiDi

  • 浏览器自动化
    • 浏览器.关闭()
    • Browser.userAgent()
    • 浏览器.version()
    • Puppeteer.启动()
  • 页面自动化
    • Frame.goto()(除了 refererreferrerPolicy
    • 页面“弹出”事件
    • Page.bringToFront()
    • Page.cookies()
    • Page.deleteCookie()
    • Page.goBack()
    • Page.goForward()
    • Page.goto(除 refererreferrerPolicy 外)
    • 页面重新加载(除 ignoreCache 参数外)
    • Page.setCacheEnabled()
    • Page.setCookie()
    • Page.setExtraHTTPHeaders()
    • Page.setGeolocation()
    • Page.setViewport(仅限 widthheightdeviceScaleFactor
    • Page.waitForFileChooser()
    • Page.workers()
    • PageEvent.WorkerCreated
    • PageEvent.WorkerDestroyed
    • Target.opener()
  • 脚本评估
    • JSHandle.evaluate()
    • JSHandle.evaluateHandle()
    • Page.evaluate()
    • Page.evaluateOnNewDocument()
    • Page.exposeFunction()
  • 选择器定位器,ARIA 除外:
    • Page.$
    • Page.$$
    • Page.$$eval
    • Page.$eval
    • Page.waitForSelector
    • Page.locator() 和所有定位器 API
  • Input
    • ElementHandle.click
    • ElementHandle.uploadFile
    • Keyboard.down
    • Keyboard.press
    • Keyboard.sendCharacter
    • Keyboard.type
    • Keyboard.up
    • 鼠标事件(专用拖放 API 方法除外)
    • Page.tap
    • 触摸屏.*
  • JavaScript 对话框拦截
    • page.on('dialog')
    • 对话.*
  • 截图(并非所有参数都支持)
    • Page.screenshot(支持的参数有 clipencodingfullPage
  • PDF 生成(并非所有参数都支持)
    • Page.pdf(仅支持 formatheightlandscapemarginpageRangesprintBackgroundscalewidth
    • Page.createPDFStream(仅支持 formatheightlandscapemarginpageRangesprintBackgroundscalewidth
  • 权限
    • BrowserContext.clearPermissionOverrides()
    • BrowserContext.overridePermissions()
  • 各种模拟
    • Page.emulateTimezone()
    • Page.isJavaScriptEnabled()
    • Page.setJavaScriptEnabled()
  • 请求拦截
    • HTTPRequest.abort()(不支持自定义错误)
    • HTTPRequest.abortErrorReason()
    • HTTPRequest.continue()
    • HTTPRequest.continueRequestOverrides()
    • HTTPRequest.failure()
    • HTTPRequest.finalizeInterceptions()
    • HTTPRequest.interceptResolutionState()
    • HTTPRequest.isInterceptResolutionHandled()
    • HTTPRequest.response()
    • HTTPRequest.responseForRequest()
    • Page.authenticate()
    • Page.setRequestInterception()
    • Page.setUserAgent()

另请参阅

🌐 See also