with certain extensions.</p><p>Puppeteer passes <code>--disable-extensions</code> flag by default and will fail to launch when such policies are active.</p><p>To work around this, try running without the flag:</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">const</span><spanclass="token plain"> browser </span><spanclass="token operator"style="color:#393A34">=</span><spanclass="token plain"></span><spanclass="token keyword"style="color:#00009f">await</span><spanclass="token plain"> puppeteer</span><spanclass="token punctuation"style="color:#393A34">.</span><spanclass="token function"style="color:#d73a49">launch</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"> ignoreDefaultArgs</span><spanclass="token operator"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token punctuation"style="color:#393A34">[</span><spanclass="token string"style="color:#e3116c">'--disable-extensions'</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"><svgclass="copyButtonIcon_y97N"viewBox="0 0 24 24"><pathd="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><svgclass="copyButtonSuccessIcon_LjdS"viewBox="0 0 24 24"><pathd="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><blockquote><p>Context: <ahref="https://github.com/puppeteer/puppeteer/issues/3681#issuecomment-447865342"target="_blank"rel="noopener noreferrer">issue 3681</a>.</p></blockquote><h2class="anchor anchorWithStickyNavbar_LWe7"id="chrome-headless-doesnt-launch-on-unix">Chrome headless doesn't launch on UNIX<aclass="hash-link"href="#chrome-headless-doesnt-launch-on-unix"title="Direct link to heading"></a></h2><p>Make sure all the necessary dependencies are installed. You can run <code>ldd chrome | grep not</code> on a Linux
machine to check which dependencies are missing. The common ones are provided below.</p><detailsclass="details_lb9f alert alert--info details_b_Ee"data-collapsed="true"><summary>Debian (e.g. Ubuntu) Dependencies</summary><div><divclass="collapsibleContent_i85q"><divclass="codeBlockContainer_Ckt0 theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_biex"><pretabindex="0"class="prism-code language-text codeBlock_bY9V thin-scrollbar"><codeclass="codeBlockLines_e6Vv"><spanclass="token-line"style="color:#393A34"><spanclass="token plain">ca-certificates</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain">fonts-liberation</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain">libappindicator3-1</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain">libasound2</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain">libatk-bridge2.0-0</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain">libatk1.0-0</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain">libc6</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain">libcairo2</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain">libcups2</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain">libdbus-1-3</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain">libexpat1</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain">libfontconfig1</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain">libgbm1</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain">libgcc1</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain">libglib2.0-0</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain">libgtk-3-0</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain">libnspr4</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain">libnss3</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain">libpango-1.0-0</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain">libpangocairo-1.0-0</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain">libstdc++6</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain">libx11-6</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain">libx11-xcb1</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain">libxcb1</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain">libxcomposite1</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain">libxcursor1</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain">libxdamage1</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain">libxext6</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain">libxfixes3</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain">libxi6</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain">libxrandr2</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain">libxrender1</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain">libxss1</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain">libxtst6</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain">lsb-release</span><br></span><spanc
the host should be configured first. If there's no good sandbox for Chrome to use, it will crash
with the error <code>No usable sandbox!</code>.</p><p>If you <strong>absolutely trust</strong> the content you open in Chrome, you can launch Chrome
but in some cases they open up more kernel attack surface for (unsandboxed) non-root processes to elevate to
kernel privileges.</p><divclass="language-bash codeBlockContainer_Ckt0 theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_biex"><pretabindex="0"class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><codeclass="codeBlockLines_e6Vv"><spanclass="token-line"style="color:#393A34"><spanclass="token function"style="color:#d73a49">sudo</span><spanclass="token plain"> sysctl -w kernel.unprivileged_userns_clone</span><spanclass="token operator"style="color:#393A34">=</span><spanclass="token number"style="color:#36acaa">1</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"><svgclass="copyButtonIcon_y97N"viewBox="0 0 24 24"><pathd="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><svgclass="copyButtonSuccessIcon_LjdS"viewBox="0 0 24 24"><pathd="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3class="anchor anchorWithStickyNavbar_LWe7"id="alternative-setup-setuid-sandbox">[alternative]<!----> Setup <ahref="https://chromium.googlesource.com/chromium/src/+/HEAD/docs/linux/suid_sandbox_development.md"target="_blank"rel="noopener noreferrer">setuid sandbox</a><aclass="hash-link"href="#alternative-setup-setuid-sandbox"title="Direct link to heading"></a></h3><p>The setuid sandbox comes as a standalone executable and is located next to the Chromium that Puppeteer downloads. It is
fine to re-use the same sandbox executable for different Chromium versions, so the following could be
done only once per host environment:</p><divclass="language-bash codeBlockContainer_Ckt0 theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_biex"><pretabindex="0"class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><codeclass="codeBlockLines_e6Vv"><spanclass="token-line"style="color:#393A34"><spanclass="token comment"style="color:#999988;font-style:italic"># cd to the downloaded instance</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token builtin class-name">cd</span><spanclass="token plain"></span><spanclass="token operator"style="color:#393A34"><</span><spanclass="token plain">project-dir-path</span><spanclass="token operator"style="color:#393A34">></span><spanclass="token plain">/node_modules/puppeteer/.local-chromium/linux-</span><spanclass="token operator"style="color:#393A34"><</span><spanclass="token plain">revision</span><spanclass="token operator"style="color:#393A34">></span><spanclass="token plain">/chrome-linux/</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token function"style="color:#d73a49">sudo</span><spanclass="token plain"></span><spanclass="token function"style="color:#d73a49">chown</span><spanclass="token plain"> root:root chrome_sandbox</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token function"style="color:#d73a49">sudo</span><spanclass="token plain"></span><spanclass="token function"style="color:#d73a49">chmod</span><spanclass="token plain"></span><spanclass="token number"style="color:#36acaa">4755</span><spanclass="token plain"> chrome_sandbox</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token comment"style="color:#999988;font-style:italic"># copy sandbox executable to a shared location</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token function"style="color:#d73a49">sudo</span><spanclass="token plain"></span><spanclass="token function"style="color:#d73a49">cp</span><spanclass="token plain"> -p chrome_sandbox /usr/local/sbin/chrome-devel-sandbox</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token comment"style="color:#999988;font-style:italic"># export CHROME_DEVEL_SANDBOX env variable</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token builtin class-name">export</span><spanclass="token plain"></span><spanclass="token assign-left variable"style="color:#36acaa">CHROME_DEVEL_SANDBOX</span><spanclass="token operator"style="color:#393A34">=</span><spanclass="token plain">/usr/local/sbin/chrome-devel-sandbox</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"><svgclass="copyButtonIcon_y97N"viewBox="0 0 24 24"><pathd="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><svgclass="copyButtonSuccessIcon_LjdS"viewBox="0 0 24 24"><pathd="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>You might want to export the <code>CHROME_DEVEL_SANDBOX</code> env variable by default. In this case, add the following to the <code>~/.bashrc</code>
or <code>.zshenv</code>:</p><divclass="language-bash codeBlockContainer_Ckt0 theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_biex"><pretabindex="0"class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><codeclass="codeBlockLines_e6Vv"><spanclass="token-line"style="color:#393A34"><spanclass="token builtin class-name">export</span><spanclass="token plain"></span><spanclass="token assign-left variable"style="color:#36acaa">CHROME_DEVEL_SANDBOX</span><spanclass="token operator"style="color:#393A34">=</span><spanclass="token plain">/usr/local/sbin/chrome-devel-sandbox</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"><svgclass="copyButtonIcon_y97N"viewBox="0 0 24 24"><pathd="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><svgclass="copyButtonSuccessIcon_LjdS"viewBox="0 0 24 24"><pathd="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="running-puppeteer-on-travis-ci">Running Puppeteer on Travis CI<aclass="hash-link"href="#running-puppeteer-on-travis-ci"title="Direct link to heading"></a></h2><blockquote><p>👋 We ran our tests for Puppeteer on Travis CI until v6.0.0 (when we've migrated to GitHub Actions) - see our historical <ahref="https://github.com/puppeteer/puppeteer/blob/v5.5.0/.travis.yml"target="_blank"rel="noopener noreferrer"><code>.travis.yml</code> (v5.5.0)</a> for reference.</p></blockquote><p>Tips-n-tricks:</p><ul><li><ahref="https://en.wikipedia.org/wiki/Xvfb"target="_blank"rel="noopener noreferrer">xvfb</a> service should be launched in order to run Chromium in non-headless mode</li><li>Runs on Xenial Linux on Travis by default</li><li>Runs <code>npm install</code> by default</li><li><code>node_modules</code> is cached by default</li></ul><p><code>.travis.yml</code> might look like this:</p><divclass="language-yml codeBlockContainer_Ckt0 theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_biex"><pretabindex="0"class="prism-code language-yml codeBlock_bY9V thin-scrollbar"><codeclass="codeBlockLines_e6Vv"><spanclass="token-line"style="color:#393A34"><spanclass="token key atrule"style="color:#00a4db">language</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"> node_js</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#00a4db">node_js</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"> node</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#00a4db">services</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"> xvfb</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#00a4db">script</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 plain"> npm test</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"><svgclass="copyButtonIcon_y97N"viewBox="0 0 24 24"><pathd="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><svgclass="copyButtonSuccessIcon_LjdS"viewBox="0
image</a> in your config
like so:<divclass="language-yaml codeBlockContainer_Ckt0 theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_biex"><pretabindex="0"class="prism-code language-yaml codeBlock_bY9V thin-scrollbar"><codeclass="codeBlockLines_e6Vv"><spanclass="token-line"style="color:#393A34"><spanclass="token key atrule"style="color:#00a4db">docker</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 plain"></span><spanclass="token key atrule"style="color:#00a4db">image</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"> circleci/node</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token number"style="color:#36acaa">14</span><spanclass="token plain"></span><spanclass="token comment"style="color:#999988;font-style:italic"># Use your desired version</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#00a4db">environment</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 key atrule"style="color:#00a4db">NODE_ENV</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"> development </span><spanclass="token comment"style="color:#999988;font-style:italic"># Only needed if puppeteer is in `devDependencies`</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"><svgclass="copyButtonIcon_y97N"viewBox="0 0 24 24"><pathd="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><svgclass="copyButtonSuccessIcon_LjdS"viewBox="0 0 24 24"><pathd="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li><li>Dependencies like <code>libXtst6</code> probably need to be installed via <code>apt-get</code>,
(<code>2</code>). To fix this, set <code>jest --maxWorkers=2</code> in your test command.</li></ol><h2class="anchor anchorWithStickyNavbar_LWe7"id="running-puppeteer-in-docker">Running Puppeteer in Docker<aclass="hash-link"href="#running-puppeteer-in-docker"title="Direct link to heading"></a></h2><blockquote><p>👋 We used <ahref="https://cirrus-ci.org/"target="_blank"rel="noopener noreferrer">Cirrus Ci</a> to run our tests for Puppeteer in a Docker container until v3.0.x - see our historical <ahref="https://github.com/puppeteer/puppeteer/blob/v3.0.1/.ci/node12/Dockerfile.linux"target="_blank"rel="noopener noreferrer"><code>Dockerfile.linux</code> (v3.0.1)</a> for reference.
Starting from v16.0.0 we are shipping a Docker image via the GitHub registry. The Dockerfile is located <ahref="https://github.com/puppeteer/puppeteer/blob/main/docker/Dockerfile"target="_blank"rel="noopener noreferrer">here</a> and the usage instructions are in the <ahref="https://github.com/puppeteer/puppeteer#running-in-docker"target="_blank"rel="noopener noreferrer">README.md</a>. The instructions below might be still helpful if you are building your own image.</p></blockquote><p>Getting headless Chrome up and running in Docker can be tricky.
This is <ahref="https://github.com/c0b/chrome-in-docker/issues/1"target="_blank"rel="noopener noreferrer">typically too small</a> for Chrome
and will cause Chrome to crash when rendering large pages. To fix, run the container with
<code>docker run --shm-size=1gb</code> to increase the size of <code>/dev/shm</code>. Since Chrome 65, this is no
longer necessary. Instead, launch the browser with the <code>--disable-dev-shm-usage</code> flag:</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">const</span><spanclass="token plain"> browser </span><spanclass="token operator"style="color:#393A34">=</span><spanclass="token plain"></span><spanclass="token keyword"style="color:#00009f">await</span><spanclass="token plain"> puppeteer</span><spanclass="token punctuation"style="color:#393A34">.</span><spanclass="token function"style="color:#d73a49">launch</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"> args</span><spanclass="token operator"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token punctuation"style="color:#393A34">[</span><spanclass="token string"style="color:#e3116c">'--disable-dev-shm-usage'</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"><svgclass="copyButtonIcon_y97N"viewBox="0 0 24 24"><pathd="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><svgclass="copyButtonSuccessIcon_LjdS"viewBox="0 0 24 24"><pathd="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>This will write shared memory files into <code>/tmp</code> instead of <code>/dev/shm</code>. See <ahref="https://bugs.chromium.org/p/chromium/issues/detail?id=736452"target="_blank"rel="noopener noreferrer">crbug.com/736452</a> for more details.</p><p>Seeing other weird errors when launching Chrome? Try running your container
with <code>docker run --cap-add=SYS_ADMIN</code> when developing locally. Since the Dockerfile
adds a <code>pptr</code> user as a non-privileged user, it may not have all the necessary privileges.</p><p><ahref="https://github.com/Yelp/dumb-init"target="_blank"rel="noopener noreferrer">dumb-init</a> is worth checking out if you're
experiencing a lot of zombies Chrome processes sticking around. There's special
treatment for processes with PID=1, which makes it hard to terminate Chrome
properly in some cases (e.g. in Docker).</p><h2class="anchor anchorWithStickyNavbar_LWe7"id="running-puppeteer-in-the-cloud">Running Puppeteer in the cloud<aclass="hash-link"href="#running-puppeteer-in-the-cloud"title="Direct link to heading"></a></h2><h3class="anchor anchorWithStickyNavbar_LWe7"id="running-puppeteer-on-google-app-engine">Running Puppeteer on Google App Engine<aclass="hash-link"href="#running-puppeteer-on-google-app-engine"title="Direct link to heading"></a></h3><p>The Node.js runtime of the <ahref="https://cloud.google.com/appengine/docs/standard/nodejs/"target="_blank"rel="noopener noreferrer">App Engine standard environment</a> comes with all system packages needed to run Headless Chrome.</p><p>To use <code>puppeteer</code>, simply list the module as a dependency in your <code>package.json</code> and deploy to Google App Engine. Read more about using <code>puppeteer</code> on App Engine by following <ahref="https://cloud.google.com/appengine/docs/standard/nodejs/using-headless-chrome-with-puppeteer"target="_blank"rel="noopener noreferrer">the official tutorial</a>.</p><h3class="anchor anchorWithStickyNavbar_LWe7"id="running-puppeteer-on-google-cloud-functions">Running Puppeteer on Google Cloud Functions<aclass="hash-link"href="#running-puppeteer-on-google-cloud-functions"title="Direct link to heading"></a></h3><p>The Node.js 10 runtime of <ahref="https://cloud.google.com/functions/docs/"target="_blank"rel="noopener noreferrer">Google Cloud Functions</a> comes with all system packages needed to run Headless Chrome.</p><p>To use <code>puppeteer</code>, simply list the module as a dependency in your <code>package.json</code> and deploy your function to Google Cloud Functions using the <code>nodejs10</code> runtime.</p><h3class="anchor anchorWithStickyNavbar_LWe7"id="running-puppeteer-on-google-cloud-run">Running Puppeteer on Google Cloud Run<aclass="hash-link"href="#running-puppeteer-on-google-cloud-run"title="Direct link to heading"></a></h3><p>The default Node.js runtime of <ahref="https://cloud.google.com/run/docs/"target="_blank"rel="noopener noreferrer">Google Cloud Run</a> does not come with the system packages needed to run Headless Chrome. You will need to set up your own <code>Dockerfile</code> and <ahref="#chrome-headless-doesnt-launch-on-unix">include the missing dependencies</a>.</p><h3class="anchor anchorWithStickyNavbar_LWe7"id="running-puppeteer-on-heroku">Running Puppeteer on Heroku<aclass="hash-link"href="#running-puppeteer-on-heroku"title="Direct link to heading"></a></h3><p>Running Puppeteer on Heroku requires some additional dependencies that aren't included on the Linux box that Heroku spins up for you. To add the dependencies on deploy, add the Puppeteer Heroku buildpack to the list of buildpacks for your app under Settings > Buildpacks.</p><p>The url for the buildpack is <ahref="https://github.com/jontewks/puppeteer-heroku-buildpack"target="_blank"rel="noopener noreferrer">https://github.com/jontewks/puppeteer-heroku-buildpack</a></p><p>Ensure that you're using <code>'--no-sandbox'</code> mode when launching Puppeteer. This can be done by passing it as an argument to your <code>.launch()</code> call: <code>puppeteer.launch({ args: ['--no-sandbox'] });</code>.</p><p>When you click add buildpack, simply paste that url into the input, and click save. On the next deploy, your app will also install the dependencies that Puppeteer needs to run.</p><p>If you need to render Chinese, Japanese, or Korean characters you may need to use a buildpack with additional font files like <ahref="https://github.com/CoffeeAndCode/puppeteer-heroku-buildpack"target="_blank"rel="noopener noreferrer">https://github.com/CoffeeAndCode/puppeteer-heroku-buildpack</a></p><p>There's also another <ahref="https://timleland.com/headless-chrome-on-heroku/"target="_blank"rel="noopener noreferrer">simple guide</a> from @timleland that includes a sample project: <ahref="https://timleland.com/headless-chrome-on-heroku/"