<ahref="https://pptr.dev/contributing"target="_blank"rel="noopener noreferrer">contributing guide</a>.</p><h2class="anchor anchorWithStickyNavbar_LWe7"id="q-what-is-the-status-of-cross-browser-support">Q: What is the status of cross-browser support?<ahref="#q-what-is-the-status-of-cross-browser-support"class="hash-link"aria-label="Direct link to Q: What is the status of cross-browser support?"title="Direct link to Q: What is the status of cross-browser support?"></a></h2><p>Official Firefox support is currently experimental. The ongoing collaboration
non-standard DevTools Protocol used by Chrome).</p><p>Update 2023-11-17: Puppeteer has experimental support for the new
<ahref="https://w3c.github.io/webdriver-bidi/"target="_blank"rel="noopener noreferrer">WebDriverBiDi</a> protocol that can be used
to automate Firefox. The WebDriver BiDi implementation in Firefox will replace
the current CDP implementation in Firefox in the future. See
<ahref="https://pptr.dev/webdriver-bidi"target="_blank"rel="noopener noreferrer">https://pptr.dev/webdriver-bidi</a> for more details.</p><h2class="anchor anchorWithStickyNavbar_LWe7"id="q-does-puppeteer-support-webdriver-bidi">Q: Does Puppeteer support WebDriver BiDi?<ahref="#q-does-puppeteer-support-webdriver-bidi"class="hash-link"aria-label="Direct link to Q: Does Puppeteer support WebDriver BiDi?"title="Direct link to Q: Does Puppeteer support WebDriver BiDi?"></a></h2><p>Puppeteer has experimental support for WebDriver BiDi. See <ahref="https://pptr.dev/webdriver-bidi"target="_blank"rel="noopener noreferrer">https://pptr.dev/webdriver-bidi</a>.</p><h2class="anchor anchorWithStickyNavbar_LWe7"id="q-what-are-puppeteers-goals-and-principles">Q: What are Puppeteer’s goals and principles?<ahref="#q-what-are-puppeteers-goals-and-principles"class="hash-link"aria-label="Direct link to Q: What are Puppeteer’s goals and principles?"title="Direct link to Q: What are Puppeteer’s goals and principles?"></a></h2><p>The goals of the project are:</p><ul><li>Provide a reference implementation that highlights the capabilities of the
and <ahref="https://w3c.github.io/webdriver-bidi/"target="_blank"rel="noopener noreferrer">WebDriver BiDi</a> protocols.</li><li>Grow the adoption of automated cross-browser testing.</li><li>Help dogfood new DevTools Protocol and WebDriver BiDi features...and catch bugs!</li><li>Learn more about the pain points of automated browser testing and help fill
it safe to automate potentially malicious pages.</li><li><strong>Stability</strong>: Puppeteer should not be flaky and should not leak memory.</li><li><strong>Simplicity</strong>: Puppeteer provides a high-level API that’s easy to use,
understand, and debug.</li></ul><h2class="anchor anchorWithStickyNavbar_LWe7"id="q-is-puppeteer-a-replacement-for-selenium-webdriver">Q: Is Puppeteer a replacement for Selenium WebDriver?<ahref="#q-is-puppeteer-a-replacement-for-selenium-webdriver"class="hash-link"aria-label="Direct link to Q: Is Puppeteer a replacement for Selenium WebDriver?"title="Direct link to Q: Is Puppeteer a replacement for Selenium WebDriver?"></a></h2><p><strong>No</strong>. Both projects are valuable for very different reasons:</p><ul><li>Selenium WebDriver focuses on cross-browser automation and provides bindings for
multiple languages; Puppeteer is only for JavaScript.</li><li>Puppeteer focuses on Chromium; its value proposition is richer functionality
for Chromium-based browsers.</li></ul><p>That said, you <strong>can</strong> use Puppeteer to run tests against Chromium, e.g. using
<ahref="https://github.com/puppeteer/puppeteer/#getting-started"target="_blank"rel="noopener noreferrer">very easy to start with</a>.</li><li>Puppeteer has event-driven architecture, which removes a lot of potential
flakiness. There’s no need for “sleep(1000)” calls in puppeteer scripts.</li><li>Puppeteer exposes browser contexts, making it possible to efficiently
Chrome DevTools to inspect the test environment.</li></ul><h2class="anchor anchorWithStickyNavbar_LWe7"id="q-why-doesnt-puppeteer-vxxx-work-with-chromium-vyyy">Q: Why doesn’t Puppeteer v.XXX work with Chromium v.YYY?<ahref="#q-why-doesnt-puppeteer-vxxx-work-with-chromium-vyyy"class="hash-link"aria-label="Direct link to Q: Why doesn’t Puppeteer v.XXX work with Chromium v.YYY?"title="Direct link to Q: Why doesn’t Puppeteer v.XXX work with Chromium v.YYY?"></a></h2><p>We see Puppeteer as an <strong>indivisible entity</strong> with Chromium. Each version of
Puppeteer bundles a specific version of Chromium –<strong>the only</strong> version it is
guaranteed to work with.</p><p>This is not an artificial constraint: A lot of work on Puppeteer is actually
taking place in the Chromium repository. Here’s a typical story:</p><ul><li>A Puppeteer bug is reported:
<ahref="https://github.com/puppeteer/puppeteer/issues/2709"target="_blank"rel="noopener noreferrer">https://github.com/puppeteer/puppeteer/issues/2709</a></li><li>It turned out this is an issue with the DevTools protocol, so we’re fixing it
in Chromium: <ahref="https://chromium-review.googlesource.com/c/chromium/src/+/1102154"target="_blank"rel="noopener noreferrer">https://chromium-review.googlesource.com/c/chromium/src/+/1102154</a></li><li>Once the upstream fix is landed, we roll updated Chromium into Puppeteer:
<ahref="https://github.com/puppeteer/puppeteer/pull/2769"target="_blank"rel="noopener noreferrer">https://github.com/puppeteer/puppeteer/pull/2769</a></li></ul><h2class="anchor anchorWithStickyNavbar_LWe7"id="q-which-chrome-version-does-puppeteer-use">Q: Which Chrome version does Puppeteer use?<ahref="#q-which-chrome-version-does-puppeteer-use"class="hash-link"aria-label="Direct link to Q: Which Chrome version does Puppeteer use?"title="Direct link to Q: Which Chrome version does Puppeteer use?"></a></h2><p>Look for the <code>chrome</code> entry in
<ahref="https://github.com/puppeteer/puppeteer/blob/main/packages/puppeteer-core/src/revisions.ts"target="_blank"rel="noopener noreferrer">revisions.ts</a>.</p><h2class="anchor anchorWithStickyNavbar_LWe7"id="q-which-firefox-version-does-puppeteer-use">Q: Which Firefox version does Puppeteer use?<ahref="#q-which-firefox-version-does-puppeteer-use"class="hash-link"aria-label="Direct link to Q: Which Firefox version does Puppeteer use?"title="Direct link to Q: Which Firefox version does Puppeteer use?"></a></h2><p>Since Firefox support is experimental, Puppeteer downloads the latest
single-page applications.</strong></p><h2class="anchor anchorWithStickyNavbar_LWe7"id="q-whats-the-difference-between-a-trusted-and-untrusted-input-event">Q: What’s the difference between a “trusted" and "untrusted" input event?<ahref="#q-whats-the-difference-between-a-trusted-and-untrusted-input-event"class="hash-link"aria-label="Direct link to Q: What’s the difference between a “trusted" and "untrusted" input event?"title="Direct link to Q: What’s the difference between a “trusted" and "untrusted" input event?"></a></h2><p>In browsers, input events could be divided into two big groups: trusted vs.
event flag</li><li>sniffing for accompanying events. For example, every trusted <code>'click'</code> event
is preceded by <code>'mousedown'</code> and <code>'mouseup'</code> events.</li></ul><p>For automation purposes it’s important to generate trusted events. <strong>All input
events generated with Puppeteer are trusted and fire proper accompanying
events.</strong> If, for some reason, one needs an untrusted event, it’s always
possible to hop into a page context with <code>page.evaluate</code> and generate a fake
event:</p><divclass="language-ts codeBlockContainer_Ckt0 theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_biex"><pretabindex="0"class="prism-code language-ts codeBlock_bY9V thin-scrollbar"><codeclass="codeBlockLines_e6Vv"><spanclass="token-line"style="color:#393A34"><spanclass="token keyword"style="color:#00009f">await</span><spanclass="token plain"> page</span><spanclass="token punctuation"style="color:#393A34">.</span><spanclass="token function"style="color:#d73a49">evaluate</span><spanclass="token punctuation"style="color:#393A34">(</span><spanclass="token punctuation"style="color:#393A34">(</span><spanclass="token punctuation"style="color:#393A34">)</span><spanclass="token plain"></span><spanclass="token operator"style="color:#393A34">=></span><spanclass="token plain"></span><spanclass="token punctuation"style="color:#393A34">{</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"> document</span><spanclass="token punctuation"style="color:#393A34">.</span><spanclass="token function"style="color:#d73a49">querySelector</span><spanclass="token punctuation"style="color:#393A34">(</span><spanclass="token string"style="color:#e3116c">'button[type=submit]'</span><spanclass="token punctuation"style="color:#393A34">)</span><spanclass="token punctuation"style="color:#393A34">.</span><spanclass="token function"style="color:#d73a49">click</span><spanclass="token punctuation"style="color:#393A34">(</span><spanclass="token punctuation"style="color:#393A34">)</span><spanclass="token punctuation"style="color:#393A34">;</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token punctuation"style="color:#393A34">}</span><spanclass="token punctuation"style="color:#393A34">)</span><spanclass="token punctuation"style="color:#393A34">;</span><br></span></code></pre><divclass="buttonGroup__atx"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_eSgA"aria-hidden="true"><svgviewBox="0 0 24 24"class="copyButtonIcon_y97N"><pathfill="currentColor"d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svgviewBox="0 0 24 24"class="copyButtonSuccessIcon_LjdS"><pathfill="currentColor"d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2class="anchor anchorWithStickyNavbar_LWe7"id="q-does-puppeteer-support-media-and-audio-playback">Q: Does Puppeteer support media and audio playback?<ahref="#q-does-puppeteer-support-media-and-audio-playback"class="hash-link"aria-label="Direct link to Q: Does Puppeteer support media and audio playback?"title="Direct link to Q: Does Puppeteer support media and audio playback?"></a></h2><p>Puppeteer uses <ahref="https://developer.chrome.com/blog/chrome-for-testing/"target="_blank"rel="noopener noreferrer">Chrome for Testing</a> binaries
by default which ship with properietary codecs support starting from
<ahref="https://chromiumdash.appspot.com/commit/12d607016c31ea13579e897740c765be189ed6eb"target="_blank"rel="noopener noreferrer">M120</a>.</p><h2class="anchor anchorWithStickyNavbar_LWe7"id="q-i-am-having-trouble-installing--running-puppeteer-in-my-test-environment-where-should-i-look-for-help">Q: I am having trouble installing / running Puppeteer in my test environment. Where should I look for help?<ahref="#q-i-am-having-trouble-installing--running-puppeteer-in-my-test-environment-where-should-i-look-for-help"class="hash-link"aria-label="Direct link to Q: I am having trouble installing / running Puppeteer in my test environment. Where should I look for help?"title="Direct link to Q: I am having trouble installing / running Puppeteer in my test environment. Where should I look for help?"></a></h2><p>We have a
guide for various operating systems that lists the required dependencies.</p><h2class="anchor anchorWithStickyNavbar_LWe7"id="q-i-have-more-questions-where-do-i-ask">Q: I have more questions! Where do I ask?<ahref="#q-i-have-more-questions-where-do-i-ask"class="hash-link"aria-label="Direct link to Q: I have more questions! Where do I ask?"title="Direct link to Q: I have more questions! Where do I ask?"></a></h2><p>There are many ways to get help on Puppeteer:</p><ul><li>For questions: <ahref="https://stackoverflow.com/questions/tagged/puppeteer"target="_blank"rel="noopener noreferrer">Stack Overflow</a></li><li>For bug reports: <ahref="https://github.com/puppeteer/puppeteer/issues"target="_blank"rel="noopener noreferrer">GitHub Issues</a></li></ul><p>Make sure to search these channels before posting your question.</p></div></article><navclass="pagination-nav docusaurus-mt-lg"aria-label="Docs pages"><aclass="pagination-nav__link pagination-nav__link--prev"href="/next/contributing"><divclass="pagination-nav__sublabel">Previous</div><divclass="pagination-nav__label">Contributing</div></a></nav></div></div><divclass="col col--3"><divclass="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ulclass="table-of-contents table-of-contents__left-border"><li><ahref="#q-who-maintains-puppeteer"class="table-of-contents__link toc-highlight">Q: Who maintains Puppeteer?</a></li><li><ahref="#q-what-is-the-status-of-cross-browser-support"class="table-of-contents__link toc-highlight">Q: What is the status of cross-browser support?</a></li><li><ahref="#q-does-puppeteer-support-webdriver-bidi"class="table-of-contents__link toc-highlight">Q: Does Puppeteer support WebDriver BiDi?</a></li><li><ahref="#q-what-are-puppeteers-goals-and-principles"class="table-of-contents__link toc-highlight">Q: What are Puppeteer’s goals and principles?</a></li><li><ahref="#q-is-puppeteer-a-replacement-for-selenium-webdriver"class="table-of-contents__link toc-highlight">Q: Is Puppeteer a replacement for Selenium WebDriver?</a></li><li><ahref="#q-why-doesnt-puppeteer-vxxx-work-with-chromium-vyyy"class="table-of-contents__link toc-highlight">Q: Why doesn’t Puppeteer v.XXX work with Chromium v.YYY?</a></li><li><ahref="#q-which-chrome-version-does-puppeteer-use"class="table-of-contents__link toc-highlight">Q: Which Chrome version does Puppeteer use?</a></li><li><ahref="#q-which-firefox-version-does-puppeteer-use"class="table-of-contents__link toc-highlight">Q: Which Firefox version does Puppeteer use?</a></li><li><ahref="#q-whats-considered-a-navigation"class="table-of-contents__link toc-highlight">Q: What’s considered a “Navigation”?</a></li><li><ahref="#q-whats-the-difference-between-a-trusted-and-untrusted-input-event"class="table-of-contents__link toc-highlight">Q: What’s the difference between a “trusted" and "untrusted" input event?</a></li><li><ahref="#q-does-puppeteer-support-media-and-audio-playback"class="table-of-contents__link toc-highlight">Q: Does Puppeteer support media and audio playback?</a></li><li><ahref="#q-i-am-having-trouble-installing--running-puppeteer-in-my-test-environment-where-should-i-look-for-help"class="table-of-contents__link toc-highlight">Q: I am having trouble installing / running Puppeteer in my test environment. Where should I look for help?</a></li><li><ahref="#q-i-have-more-questions-where-do-i-ask"class="table-of-contents__link toc-highlight">Q: I have more questions! Where do I ask?</a></li></ul></div></div></div></div></main></div></div><footerclass="footer footer--dark"><divclass="container container-fluid"><divclass="row footer__links"><divclass="col footer__col"><divclass="footer__title">Community</div><ulclass="footer__items clean-list"><liclass="footer__item"><ahref="https://stackoverflow.com/questions/tagged/puppeteer"target="_blank"rel="noopener noreferrer"class="footer__link-item">Stack Overflow<svgwidth="13.5"height="13.5"aria-hidden="true"viewBox="0 0 24 24"class="iconExternalLink_nPIU"><pathfill="currentColor"