Puppeteer を使用して Linux (CentOS) で Web ページのスクリーンショット機能を実装する

Puppeteer を使用して Linux (CentOS) で Web ページのスクリーンショット機能を実装する

Linux に puppeteer をインストールするときに、次の問題が発生する可能性があります。この記事では、この難問から抜け出す方法を説明します。

> [email protected] をインストール /www/node_modules/puppeteer
> ノードのインストール.js

エラー: Chromium r706915 のダウンロードに失敗しました。ダウンロードをスキップするには、「PUPPETEER_SKIP_CHROMIUM_DOWNLOAD」環境変数を設定してください。
{ エラー: EACCES: 権限が拒否されました、mkdir '/www/node_modules/puppeteer/.local-chromium'
-- 非同期 --
BrowserFetcher.<匿名> (/www/node_modules/puppeteer/lib/helper.js:111:15) で
オブジェクト.<anonymous> (/www/node_modules/puppeteer/install.js:62:16)
Module._compile (module.js:635:30) で
Object.Module._extensions..js (module.js:646:10) で
Module.load (module.js:554:32) で
tryModuleLoad (module.js:497:12) で
Function.Module._load (module.js:489:3) で
Function.Module.runMain (module.js:676:10) で
起動時 (bootstrap_node.js:187:16)
bootstrap_node.js:608:3 で
エラー番号: -13,
コード: 'EACCES'、
システムコール: 'mkdir',
パス: '/www/node_modules/puppeteer/.local-chromium' }
npm WARN enoent ENOENT: そのようなファイルまたはディレクトリはありません。'/www/package.json' を開いてください
npm WARN www 説明なし
npm 警告 www リポジトリ フィールドがありません。
npm 警告 www README データがありません
npm 警告 www ライセンスフィールドがありません

puppeteer を正常にインストールし、実際にスクリーンショットを撮ったプロセスは次のとおりです。

1. nodejsとnpmをインストールする

# ダウンロードして解凍します wget -c https://nodejs.org/dist/v8.9.1/node-v8.9.1-linux-x64.tar.xz
tar -xvf ノード-v8.9.1-linux-x64.tar.xz
# 移動と名前の変更(オプション)
mv ノード-v8.9.1-linux-x64 /www/nodejs
# ソフトリンク(ショートカット)を作成します。前の手順の名前が異なる場合は、実際の状況に応じてこの手順の下線部分を調整してください。ln -s /www/nodejs/bin/node /usr/local/bin/node
ローカルの Node.js ディレクトリに npm と入力し、

2. クロムをインストールする

yum install chromium

3. puppeteer-core をインストールします (puppeteer を直接インストールすると、chromium をダウンロードできないためエラーが発生します)

npm i puppeteer-core

4. 新しいa.jsを作成する

'puppeteer-core' が必要です。
(非同期() => {
 const browser = puppeteer.launch({
 実行可能パス: '/usr/bin/chromium-browser',
 引数:["--no-sandbox"]
 });
 const page = browser.newPage() を待機します。
 page.goto('https://www.baidu.com') を待機します。
 page.screenshot({path: 'example.png'}); を待ちます。
 ブラウザを閉じるのを待ちます。
})();

このステップのコードは、インターネット上のものとは異なる場合があります。1つは、requireのコードがpuppeteerではなくpuppeteer-coreであることです。これは、puppeteerではなくpuppeteer-coreをインストールしたためです。

もう1つは、起動時に2つのパラメータがあることです。最初のパラメータは、Puppeteerを直接インストールしていないため、パスを指定する必要があります。2番目のパラメータは、Chromiumの制限によるもので、ルートアカウントで実行するためにこのパラメータを追加する必要があります。

5. a.jsを実行する

node a.js

実行後、example.pngが表示されます。

注意: ページに中国語が含まれている場合、中国語フォントがないため正しく表示されない可能性があります。解決策は、コンピュータ上の c:/windows/fonts にある中国語フォントをサーバーの /usr/share/fonts/chinese に直接アップロードすることです (デフォルトでは中国語ディレクトリがないため、自分で作成できます)。 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

Puppeter 関連ドキュメント https://pptr.dev/

要約する

以上、Linux(centos)でpuppeteerを使ってWebページのスクリーンショット機能を実現する方法についてご紹介しました。参考になれば幸いです。

以下もご興味があるかもしれません:
  • Linux 向けの強化されたスクリーンショットと共有ツール: ScreenCloud
  • Linux に MySql をインストールする手順の詳細なスクリーンショット
  • Linux で PHP を使用して Web サイトのスクリーンショットを撮る方法
  • Linux でスクリーンショットを共有するためのスクリプトを Python を使って記述するチュートリアル

<<:  MySQLリモート接続権限の詳細な説明

>>:  Vue命令の実装原理の分析

推薦する

MySQL 分離レベルの詳細な説明と例

目次MySQL の 4 つの分離レベルデータ テーブルを作成します。分離レベルの設定物事の分離レベル...

MySQLクエリステートメント内のユーザー変数のコード分析

前回の記事では、MySQL 最適化の概要 - クエリの合計数を紹介しました。この記事では、クエリ ス...

DockerにNginxをインストールする方法

DockerにNginxをインストールするNginx は、IMAP/POP3/SMTP サービスも提...

vue-tableは追加と削除を実装します

この記事では、vue-table の追加と削除の具体的なコードを参考までに紹介します。具体的な内容は...

W3Cチュートリアル(1):W3Cを理解する

1994 年に設立された組織である W3C は、共通プロトコルの開発を促進し、それらの相互運用性を確...

Linux でリモート サーバー ファイルの状態を表示する方法

以下のように表示されます。 test コマンドはファイルが存在するかどうかを判断します。 ssh u...

mycat を使用して MySQL データベースの読み取りと書き込みの分離を実装する例

MyCATとはエンタープライズアプリケーション開発のための完全にオープンソースの大規模データベースク...

Webstorm と Chrome を使用して Vue プロジェクトをデバッグする方法

目次序文1. 新しいVueプロジェクトを作成する2. WebStormの設定1. デバッガポートを設...

シームレスなトークンリフレッシュを実現する方法

目次1. 需要方法1方法2方法3 2. 実装3. 問題解決質問1: トークンの複数回の更新を防ぐ方法...

位置のいくつかの巧妙な応用の詳細な説明:sticky スティッキーポジショニング

背景: position:sticky はスティッキー配置とも呼ばれます。スティッキー配置の要素は、...

JavaScript は単一のリンクリストプロセス分析を実装します

序文:複数の要素を格納するために、配列は最も一般的に使用されるデータ構造ですが、配列には多くの欠点も...

MySQLで重複データを削除する詳細な例

MySQLで重複データを削除する詳細な例重複レコードには 2 つの意味があります。1 つは完全に重複...

Vue3でアイコンを使用する2つの例

目次1. SVGを使用する2. fontAwesomeを使用する3 ソース4 結論テクノロジースタッ...

Docker で lnmp をデプロイする詳細な手順

目次Centosイメージを取得するCentos ベースの nginx コンテナを生成するCentos...