puppeteer/next/webdriver-bidi/index.html

207 lines
74 KiB
HTML
Raw Normal View History

<!doctype html>
<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-webdriver-bidi" data-has-hydrated="false">
<head>
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v3.0.0">
<title data-rh="true">Experimental WebDriver BiDi Support | Puppeteer</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://pptr.dev/next/webdriver-bidi"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:counter" content="3"><meta data-rh="true" property="og:title" content="Experimental WebDriver BiDi Support | Puppeteer"><meta data-rh="true" name="description" content="WebDriver BiDi is a new cross-browser"><meta data-rh="true" property="og:description" content="WebDriver BiDi is a new cross-browser"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://pptr.dev/next/webdriver-bidi"><link data-rh="true" rel="alternate" href="https://pptr.dev/next/webdriver-bidi" hreflang="en"><link data-rh="true" rel="alternate" href="https://pptr.dev/next/webdriver-bidi" hreflang="x-default"><link data-rh="true" rel="preconnect" href="https://DVKY664LG7-dsn.algolia.net" crossorigin="anonymous"><link rel="search" type="application/opensearchdescription+xml" title="Puppeteer" href="/opensearch.xml">
<script src="/fix-location.js"></script><link rel="stylesheet" href="/assets/css/styles.c5c7e4fc.css">
<script src="/assets/js/runtime~main.7dc8b5a5.js" defer="defer"></script>
<script src="/assets/js/main.84008018.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="https://user-images.githubusercontent.com/10379601/29446482-04f7036a-841f-11e7-9872-91d1fc2ea683.png" alt="Puppeteer Logo" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src="https://user-images.githubusercontent.com/10379601/29446482-04f7036a-841f-11e7-9872-91d1fc2ea683.png" alt="Puppeteer Logo" class="themedComponent_mlkZ themedComponent--dark_xIcU"></div><b class="navbar__title text--truncate">Puppeteer</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/next/">Docs</a><a class="navbar__item navbar__link" href="/next/api/puppeteer.puppeteernode">Puppeteer API</a><a class="navbar__item navbar__link" href="/next/browsers-api/">@puppeteer/browsers API</a></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/next/">Next</a><ul class="dropdown__menu"><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/next/webdriver-bidi">Next</a></li><li><a class="dropdown__link" href="/">21.5.2</a></li><li><hr class="dropdown-separator"></li><li class="dropdown-archived-versions"><b>Archived versions</b></li><li><a href="https://github.com/puppeteer/puppeteer/blob/puppeteer-v21.5.1/docs/api/index.md" target="_blank" rel="noopener noreferrer" class="dropdown__link">21.5.1<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://github.com/puppeteer/puppeteer/blob/puppeteer-v21.5.0/docs/api/index.md" target="_blank" rel="noopener noreferrer" class="dropdown__link">21.5.0<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://github.com/puppeteer/puppeteer/blob/puppeteer-v21.4.1/docs/api/index.md" target="_blank" rel="noopener noreferrer" class="dropdown__link">21.4.1<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://github.com/puppeteer/puppeteer/blob/puppeteer-v21.4.0/docs/api/index.md" target="_blank" rel="noopener noreferrer" class="dropdown__link">21.4.0<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.0
<p><a href="https://w3c.github.io/webdriver-bidi/" target="_blank" rel="noopener noreferrer">WebDriver BiDi</a> is a new cross-browser
automation protocol that adds browser-driven events to WebDriver. Here are the
resources if you want to learn more about WebDriver BiDi:</p>
<ul>
<li><a href="https://developer.chrome.com/articles/webdriver-bidi/" target="_blank" rel="noopener noreferrer">WebDriver BiDi - The future of cross-browser automation</a></li>
<li><a href="https://developer.chrome.com/blog/webdriver-bidi-2023/" target="_blank" rel="noopener noreferrer">WebDriver BiDi: 2023 status update</a></li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="automate-with-chrome-and-firefox">Automate with Chrome and Firefox<a href="#automate-with-chrome-and-firefox" class="hash-link" aria-label="Direct link to Automate with Chrome and Firefox" title="Direct link to Automate with Chrome and Firefox"></a></h2>
<p>Firefox support has almost reaching feature parity with the previous CDP-based
implementation. To see which features are fully supported with WebDriver BiDi we
used the <a href="https://puppeteer.github.io/ispuppeteerwebdriverbidiready/" target="_blank" rel="noopener noreferrer">Puppeteer test suite</a>. Currently,
we still have fewer than
<a href="https://puppeteer.github.io/ispuppeteerwebdriverbidiready/firefox-delta.json" target="_blank" rel="noopener noreferrer">60</a>
tests that are failing with Firefox and WebDriver BiDi compared to the previous
CDP implementation in Firefox but we also have more than
<a href="https://puppeteer.github.io/ispuppeteerwebdriverbidiready/firefox-delta.json" target="_blank" rel="noopener noreferrer">82</a>
new tests that work with WebDriver BiDi and that didn&#x27;t work with CDP.</p>
<p>For Chrome, around 68% of the tests are currently passing with WebDriver BiDi so
the CDP-based implementation remains more powerful. Some of the Puppeteer
functionality is relying on CDP even with WebDriver BiDi enabled. Therefore, the
test pass rate is currently higher than that one of Firefox.</p>
<p>Example of launching Firefox with WebDriver BiDi:</p>
<div class="language-ts codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-ts codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> puppeteer </span><span class="token keyword" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;puppeteer&#x27;</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> browser </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> puppeteer</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">launch</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> product</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;firefox&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> protocol</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;webDriverBiDi&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> page </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> browser</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">newPage</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token operator" style="color:#393A34">...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> browser</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">close</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label=
<p>Example of launching Chrome with WebDriver BiDi:</p>
<div class="language-ts codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-ts codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> puppeteer </span><span class="token keyword" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;puppeteer&#x27;</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> browser </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> puppeteer</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">launch</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> product</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;chrome&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> protocol</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;webDriverBiDi&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> page </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> browser</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">newPage</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token operator" style="color:#393A34">...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> browser</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">close</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="puppeteer-features-supported-over-webdriver-bidi">Puppeteer features supported over WebDriver BiDi<a href="#puppeteer-features-supported-over-webdriver-bidi" class="hash-link" aria-label="Direct link to Puppeteer features supported over WebDriver BiDi" title="Direct link to Puppeteer features supported over WebDriver BiDi"></a></h2>
<ul>
<li>
<p>Browser and page automation</p>
<ul>
<li>Browser.close</li>
<li>Frame.goto() (except <code>referer</code> and <code>referrerPolicy</code>)</li>
<li>Page.bringToFront</li>
<li>Page.goBack()</li>
<li>Page.goForward()</li>
<li>Page.goto (except <code>referer</code> and <code>referrerPolicy</code>)</li>
<li>Page.reload (except for <code>ignoreCache</code> parameter)</li>
<li>Page.setViewport (<code>width</code>, <code>height</code>, <code>deviceScaleFactor</code> only)</li>
<li>Puppeteer.launch</li>
</ul>
</li>
<li>
<p><a href="https://pptr.dev/guides/evaluate-javascript" target="_blank" rel="noopener noreferrer">Script evaluation</a>:</p>
<ul>
<li>JSHandle.evaluate</li>
<li>JSHandle.evaluateHandle</li>
<li>Page.evaluate</li>
<li>Page.exposeFunction</li>
</ul>
</li>
<li>
<p><a href="https://pptr.dev/guides/query-selectors" target="_blank" rel="noopener noreferrer">Selectors</a> and <a href="https://pptr.dev/guides/locators" target="_blank" rel="noopener noreferrer">locators</a> except for ARIA:</p>
<ul>
<li>Page.$ (ARIA selectors supported in Chrome)</li>
<li>Page.$$ (ARIA selectors supported in Chrome)</li>
<li>Page.$$eval (ARIA selectors supported in Chrome)</li>
<li>Page.$eval (ARIA selectors supported in Chrome)</li>
<li>Page.waitForSelector (ARIA selectors supported in Chrome)</li>
</ul>
</li>
<li>
<p>Input</p>
<ul>
<li>ElementHandle.click</li>
<li>Keyboard.down</li>
<li>Keyboard.press</li>
<li>Keyboard.sendCharacter</li>
<li>Keyboard.type</li>
<li>Keyboard.up</li>
<li>Mouse events (except for dedicated drag&#x27;n&#x27;drop API methods)</li>
<li>Page.tap</li>
<li>TouchScreen.*</li>
</ul>
</li>
<li>
<p>JavaScript dialog interception</p>
<ul>
<li>page.on(&#x27;dialog&#x27;)</li>
<li>Dialog.*</li>
</ul>
</li>
<li>
<p>Screenshots (not all parameters are supported)</p>
<ul>
<li>Page.screenshot (supported parameters <code>clip</code>, <code>encoding</code>, <code>fullPage</code>)</li>
</ul>
</li>
<li>
<p>PDF generation (not all parameters are supported)</p>
<ul>
<li>Page.pdf (only <code>format</code>, <code>height</code>, <code>landscape</code>, <code>margin</code>, <code>pageRanges</code>, <code>printBackground</code>, <code>scale</code>, <code>width</code> are supported)</li>
<li>Page.createPDFStream (only <code>format</code>, <code>height</code>, <code>landscape</code>, <code>margin</code>, <code>pageRanges</code>, <code>printBackground</code>, <code>scale</code>, <code>width</code> are supported)</li>
</ul>
</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="puppeteer-features-not-yet-supported-over-webdriver-bidi">Puppeteer features not yet supported over WebDriver BiDi<a href="#puppeteer-features-not-yet-supported-over-webdriver-bidi" class="hash-link" aria-label="Direct link to Puppeteer features not yet supported over WebDriver BiDi" title="Direct link to Puppeteer features not yet supported over WebDriver BiDi"></a></h2>
<ul>
<li>
<p><a href="https://pptr.dev/guides/request-interception" target="_blank" rel="noopener noreferrer">Request interception</a></p>
<ul>
<li>HTTPRequest.abort()</li>
<li>HTTPRequest.abortErrorReason()</li>
<li>HTTPRequest.client()</li>
<li>HTTPRequest.continue()</li>
<li>HTTPRequest.continueRequestOverrides()</li>
<li>HTTPRequest.failure()</li>
<li>HTTPRequest.finalizeInterceptions()</li>
<li>HTTPRequest.interceptResolutionState()</li>
<li>HTTPRequest.isInterceptResolutionHandled()</li>
<li>HTTPRequest.respond()</li>
<li>HTTPRequest.responseForRequest()</li>
<li>Page.setRequestInterception()</li>
</ul>
</li>
<li>
<p>Permissions</p>
<ul>
<li>BrowserContext.clearPermissionOverrides()</li>
<li>BrowserContext.overridePermissions()</li>
</ul>
</li>
<li>
<p>Various emulations (most are supported with Chrome)</p>
<ul>
<li>Page.emulate() (supported only in Chrome)</li>
<li>Page.emulateCPUThrottling() (supported only in Chrome)</li>
<li>Page.emulateIdleState() (supported only in Chrome)</li>
<li>Page.emulateMediaFeatures() (supported only in Chrome)</li>
<li>Page.emulateMediaType() (supported only in Chrome)</li>
<li>Page.emulateTimezone() (supported only in Chrome)</li>
<li>Page.emulateVisionDeficiency() (supported only in Chrome)</li>
<li>Page.setBypassCSP() (supported only in Chrome)</li>
<li>Page.setCacheEnabled() (supported only in Chrome)</li>
<li>Page.setGeolocation() (supported only in Chrome)</li>
<li>Page.setJavaScriptEnabled() (supported only in Chrome)</li>
</ul>
</li>
<li>
<p>CDP-specific features</p>
<ul>
<li>Page.createCDPSession() (supported only in Chrome)</li>
</ul>
</li>
<li>
<p>Tracing (supported only in Chrome)</p>
</li>
<li>
<p>Coverage (supported only in Chrome)</p>
</li>
<li>
<p>Accessibility (supported only in Chrome)</p>
</li>
<li>
<p>Other methods:</p>
<ul>
<li>Browser.userAgent()</li>
<li>ElementHandle.uploadFile()</li>
<li>Frame.isOOPFrame()</li>
<li>Frame.waitForDevicePrompt()</li>
<li>HTTPResponse.buffer()</li>
<li>HTTPResponse.fromServiceWorker()</li>
<li>HTTPResponse.securityDetails()</li>
<li>Input.drag()</li>
<li>Input.dragAndDrop()</li>
<li>Input.dragOver()</li>
<li>Input.drop()</li>
<li>Page.authenticate()</li>
<li>Page.cookies()</li>
<li>Page.deleteCookie()</li>
<li>Page.emulateNetworkConditions()</li>
<li>Page.isDragInterceptionEnabled()</li>
<li>Page.isJavaScriptEnabled() (supported only in Chrome)</li>
<li>Page.isServiceWorkerBypassed()</li>
<li>Page.metrics()</li>
<li>Page.queryObjects() (supported only in Chrome)</li>
<li>Page.screencast() (supported only in Chrome)</li>
<li>Page.setBypassServiceWorker()</li>
<li>Page.setCookie()</li>
<li>Page.setDragInterception()</li>
<li>Page.setExtraHTTPHeaders()</li>
<li>Page.setOfflineMode()</li>
<li>Page.setUserAgent()</li>
<li>Page.waitForDevicePrompt()</li>
<li>Page.waitForFileChooser()</li>
<li>Page.workers()</li>
<li>PageEvent.popup</li>
<li>PageEvent.WorkerCreated</li>
<li>PageEvent.WorkerDestroyed</li>
<li>Target.opener()</li>
</ul>
</li>
</ul></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/next/integrations/ng-schematics"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Puppeteer Angular Schematic</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/next/chromium-support"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Chromium Support</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#automate-with-chrome-and-firefox" class="table-of-contents__link toc-highlight">Automate with Chrome and Firefox</a></li><li><a href="#puppeteer-features-supported-over-webdriver-bidi" class="table-of-contents__link toc-highlight">Puppeteer features supported over WebDriver BiDi</a></li><li><a href="#puppeteer-features-not-yet-supported-over-webdriver-bidi" class="table-of-contents__link toc-highlight">Puppeteer features not yet supported over WebDriver BiDi</a></li></ul></div></div></div></div></main></div></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://stackoverflow.com/questions/tagged/puppeteer" target="_blank" rel="noopener noreferrer" class="footer__link-item">Stack Overflow<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/chromedevtools" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://goo.gle/devtools-youtube" target="_blank" rel="noopener noreferrer" class="footer__link-item">YouTube<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2023 Google, Inc.</div></div></div></footer></div>
</body>
</html>