Puppeteer でオフライン環境において Chrome を利用するための手順を整理したドキュメントです。
Puppeteer は Node.js 上で動作するヘッドレスブラウザ自動化ツールです。通常、puppeteer パッケージをインストールすると Chrome for Testing が自動的にダウンロードされますが、オフライン環境ではこの自動ダウンロードが利用できません。
本ドキュメントでは、オフライン環境で Puppeteer を利用するための複数のアプローチを説明します。
Puppeteer には 2 種類のパッケージがあります。
npm i puppeteerインストール時に Chrome for Testing (約 170MB macOS、約 282MB Linux、約 280MB Windows) と chrome-headless-shell バイナリを自動的にダウンロードします。
npm i puppeteer-coreブラウザをダウンロードせず、ライブラリのみをインストールします。既存の Chrome または Chromium を使用する場合に適しています。
@puppeteer/browsers CLI ツールを使用して、事前に Chrome for Testing をダウンロードする方法です。
npx @puppeteer/browsers install chrome@stablenpx @puppeteer/browsers install chrome@116.0.5793.0npx @puppeteer/browsers install chrome@117Puppeteer v19.0.0 以降、ブラウザは $HOME/.cache/puppeteer にユーザーグローバルにキャッシュされます。このキャッシュディレクトリは複数のインストール間で共有されるため、一度ダウンロードすればオフライン環境で再利用できます。
Linux の場合:
$HOME/.cache/puppeteer/chrome/linux-142.0.7444.175/chrome-linux64/chrome
Windows の場合:
%USERPROFILE%\.cache\puppeteer\chrome\win64-137.0.7151.70\chrome-win64\chrome.exe
export PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
npm install puppeteerexport PUPPETEER_CACHE_DIR=/path/to/custom/cache
npm install puppeteerデフォルトのキャッシュディレクトリは os.homedir()/.cache/puppeteer です。
PUPPETEER_TMP_DIR: Puppeteer が一時ファイルを作成するディレクトリを指定HTTP_PROXY、HTTPS_PROXY、NO_PROXY: ブラウザのダウンロードと実行時に使用する HTTP プロキシ設定プロジェクトのルートディレクトリに .puppeteerrc.cjs を作成し、キャッシュディレクトリを指定します。
const { join } = require('path');
module.exports = {
cacheDirectory: join(__dirname, '.cache', 'puppeteer'),
};注意: Puppeteer の設定ファイルと環境変数は puppeteer-core では無視されます。
Chrome for Testing は Google が提供する自動化テスト専用の Chrome ビルドです。
Chrome for Testing の各バージョンは JSON API から取得できます。
curl https://googlechromelabs.github.io/chrome-for-testing/LATEST_RELEASE_STABLE
curl https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json
curl https://googlechromelabs.github.io/chrome-for-testing/latest-patch-versions-per-build-with-downloads.jsonChrome for Testing バイナリは以下の URL パターンで直接ダウンロードできます。
https://storage.googleapis.com/chrome-for-testing-public/{VERSION}/{PLATFORM}/{BINARY}-{PLATFORM}.zip
linux64mac-arm64mac-x64win32win64curl -O https://storage.googleapis.com/chrome-for-testing-public/118.0.5962.0/linux64/chrome-linux64.zip
unzip chrome-linux64.zip手動でダウンロードした Chrome や既存の Chrome を使用する場合は、executablePath オプションで実行パスを指定します。
const puppeteer = require('puppeteer');
const browser = await puppeteer.launch({
executablePath: '/path/to/chrome/executable',
});
const page = await browser.newPage();
await page.goto('https://example.com');
await browser.close();Puppeteer v19.0.0 以降、ブラウザは ~/.cache/puppeteer から自動的に検出されます。事前にこのディレクトリに Chrome をダウンロードしておけば、executablePath を指定せずに使用できます。
const puppeteer = require('puppeteer');
// キャッシュディレクトリから自動的に Chrome を検出
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://example.com');
await browser.close();以下の手順で、オンライン環境で Chrome をダウンロードし、オフライン環境で使用することを推奨します。
cd /path/to/your/project
export PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
npm install puppeteer
mkdir -p .cache/puppeteer
export PUPPETEER_CACHE_DIR=$(pwd)/.cache/puppeteer
npx @puppeteer/browsers install chrome@stablecd /path/to/your/project
export PUPPETEER_CACHE_DIR=$(pwd)/.cache/puppeteer
node your-script.jsまたは、.puppeteerrc.cjs を使用してキャッシュディレクトリを指定します。
// .puppeteerrc.cjs
const { join } = require('path');
module.exports = {
cacheDirectory: join(__dirname, '.cache', 'puppeteer'),
};各 Puppeteer バージョンは単一の Chrome バージョンに対応しています。互換性を確保するため、Puppeteer がインストールされているプロジェクトで以下のコマンドを実行することを推奨します。
npx puppeteer browsers install chromeこのコマンドは、インストールされている Puppeteer バージョンに対応する Chrome バージョンを自動的にダウンロードします。
Error: Could not find Chrome
このエラーが発生した場合、以下を確認してください。
PUPPETEER_CACHE_DIR 環境変数が正しく設定されているか.puppeteerrc.cjs の cacheDirectory が正しいパスを指しているかexecutablePath を明示的に指定しているかオンライン環境でダウンロード時にネットワークエラーが発生する場合、プロキシ設定を確認してください。
export HTTP_PROXY=http://proxy.example.com:8080
export HTTPS_PROXY=http://proxy.example.com:8080
npx @puppeteer/browsers install chrome@stable