実験的なWebDriver BiDiサポート
WebDriver BiDiは、WebDriver「Classic」とCDPの双方で優れた機能を統合し、双方向の通信を可能にし高速かつ低レベルな制御が可能な、新しいクロスブラウザオートメーションプロトコルで、現在開発中です。
関連情報
ChromeとFirefoxで自動実行
PuppeteerはChromeおよびFirefoxでのWebDriver BiDi自動実行をサポートしています。
Firefox統合は、以前のCDPベースのアプローチとの機能パリティに近付いています。詳細については、専用の発表をご覧ください。
進捗の測定
WebDriver BiDiの機能を評価するために、包括的なPuppeteerテストスイートを利用しました。
- Firefoxの場合は、現在60未満のテストがCDP実装と比較して失敗していますが、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();
ブラウザの自動化体験を統合的かつ効率的にする、わくわくするようなステップです。WebDriver BiDi と Puppeteer を試してみて、ブラウザの自動化の未来を一緒に形作っていきましょう。
WebDriver BiDi でサポートされる Puppeteer の機能
-
ブラウザとページの自動化
- Browser.close
- Frame.goto() (
referer
とreferrerPolicy
を除く) - Page.bringToFront
- Page.goBack()
- Page.goForward()
- Page.goto (
referer
とreferrerPolicy
を除く) - Page.reload (
ignoreCache
パラメータを除く) - Page.setViewport (
width
、height
、deviceScaleFactor
のみ) - Puppeteer.launch
-
- JSHandle.evaluate
- JSHandle.evaluateHandle
- Page.evaluate
- Page.exposeFunction
-
- Page.$ (ARIA セレクタは Chrome でサポートされています)
- Page.$$ (ARIA セレクタは Chrome でサポートされています)
- Page.$$eval (ARIA セレクタは Chrome でサポートされています)
- Page.$eval (ARIA セレクタは Chrome でサポートされています)
- Page.waitForSelector (ARIA セレクタは Chrome でサポートされています)
-
入力
- 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 (サポートされているパラメータ:
clip
、encoding
、fullPage
)
- Page.screenshot (サポートされているパラメータ:
-
PDF 生成 (サポートされていないパラメータもあります)
- Page.pdf (
format
、height
、landscape
、margin
、pageRanges
、printBackground
、scale
、width
のみサポートされています) - Page.createPDFStream (
format
、height
、landscape
、margin
、pageRanges
、printBackground
、scale
、width
のみサポートされています)
- Page.pdf (
-
パーミッション (Chrome のみでサポートされています)
- BrowserContext.clearPermissionOverrides()
- BrowserContext.overridePermissions()
WebDriver BiDi でまだサポートされていない Puppeteer の機能
-
- 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()