サーバー上で selenium+chromedriver を実行するための詳細なチュートリアル

サーバー上で selenium+chromedriver を実行するための詳細なチュートリアル

1. はじめに

Selenium を使用して Web サイトからデータをスクレイピングしたいのですが、phantomjs を使用するとエラーが発生することがあります。 Chrome にはヘッドレス実行モードも追加されたため、phantomjs は不要になりました。

しかし、Chromeをサーバーにインストールする際にエラーが発生しました。インストールプロセス全体の概要は次のとおりです。

2. UbuntuにChromeをインストールする

# Google Chromeをインストールする
# https://askubuntu.com/questions/79280/コマンドライン経由でChromeブラウザを適切にインストールする方法
sudo apt-get で libxss1 libappindicator1 libindicator7 をインストールします
https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb を取得します。
sudo dpkg -i google-chrome*.deb # 「エラー」が表示される場合があります。次の行で修正します。
sudo apt-getインストール -f

これでインストールは完了しているはずです。次のコマンドを実行してテストしてください。

google-chrome --headless --remote-debugging-port=9222 https://chromium.org --disable-gpu

ここでは、リモート デバッグにヘッドレス モードを使用します。ほとんどの Ubuntu マシンには GPU がないため、エラーを回避するために --disable-gpu が使用されます。
次に、サーバーへの別の ssh 接続を開き、コマンド ラインを使用してサーバーのローカル ポート 9222 にアクセスできます。

カール http://localhost:9222

正常にインストールされると、デバッグ情報が表示されます。しかし、ここでエラーを報告します。以下はエラーの解決策です。

1) 考えられるエラーの解決方法

上記のコマンドを実行すると、Chrome をルートで実行できないというエラー メッセージが表示される場合があります。現時点では、次の設定を使用してChromeを設定します

1. google-chromeファイルを見つける

私の場所は/opt/google/chrome/です

2. viでgoogle-chromeファイルを開く

vi /opt/google/chrome/google-chrome

ファイル内に見つかりました

exec -a "$0" "$HERE/chrome" "$@"

3. 最後に –user-data-dir –no-sandbox を追加します。シェルコマンド全体は次のようになります。

exec -a "$0" "$HERE/chrome" "$@" --user-data-dir --no-sandbox

4. Google Chrome を再度開くと、通常どおりアクセスできます。

3. Chromeドライバをインストールする chromedriver

chromedriverをダウンロード

Chromedriver は Chrome を操作するための API を提供し、Selenium が Chrome を制御するためのブリッジとなります。

chromedriver は最新バージョンをインストールするのがベストです。 最初は最新バージョンをインストールしておらず、エラーが報告されたことを覚えています。最新バージョンのchromedriverを使用しても問題ありません。最新バージョンは次のアドレスにあります。
https://sites.google.com/a/chromium.org/chromedriver/downloads

この記事を書いた時点での最新バージョンは2.37でした

https://chromedriver.storage.googleapis.com/2.37/chromedriver_linux64.zip を取得します。
chromedriver_linux64.zip を解凍します。

この時点で、サーバー側インターフェースのないバージョンの Chrome がインストールされます。

4. インターフェースなしバージョンのChromeの使い方

セレンからWebDriverをインポート
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument("user-agent='Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'")
wd = webdriver.Chrome(chrome_options=chrome_options、実行可能パス='/home/chrome/chromedriver')

wd.get("https://www.163.com")

コンテンツ = wd.page_source.encode('utf-8')
印刷コンテンツ

wd.quit()

ここで、chrome_options の 3 番目の設定パラメータにより、クロール防止にボーダーレス モードを使用していることが Web サイトによって検出されないようにすることができます。

以下の他の 2 つの設定は、設定されていない場合は、デスクトップ Linux システムまたは Mac システムでユーザー インターフェース付きの Chrome を開きます。デバッグ時には、次の 2 行をコメント アウトし、ユーザー インターフェース付きの Chrome を使用してプログラムをデバッグできます。

chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')

5. 参考文献

https://jiayi.space/post/zai-ubuntufu-wu-qi-shang-shi-yong-chrome-headless
https://blog.csdn.net/u013703963/article/details/71083802

要約する

サーバー上で動作する selenium+chromedriver に関するこの記事はこれで終わりです。サーバー上で動作する selenium+chromedriver の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Python は Selenium を使用して Taobao を非同期にロードしたデータ メソッドをクロールします
  • Python での Selenium 例外処理のサンプル コード
  • Linux での Selenium Chrome の使用に関する詳細な説明
  • Selenium による JavaScript スクリプトのパラメータと戻り値の実行の詳細な説明
  • Python + selenium + crontabで毎日の自動出勤機能を実現する
  • Selenium が Chrome を起動する際の設定オプションの詳細な説明
  • Selenium の一般的な例外分析とソリューションのデモンストレーション

<<:  React コンポーネントのコンストラクタとスーパーの知識ポイントのまとめ

>>:  MySQLの保存場所を新しいディスクに移行する方法

推薦する

MySQL infobrightのインストール手順

目次1. 次のように、「rpm -ivh インストール パッケージ」コマンドを使用して rpm パッ...

海外でダウンロードできる25個の新鮮で便利なアイコンセット

1. Eコマースアイコン2. アイコンスイーツ2 3. 携帯電話アイコンパック4. 旗アイコンセット...

Bootstrap が人気な 11 の理由

序文最も人気のあるフロントエンド開発フレームワークである Bootstrap は、Web サイトの開...

Nginx ドメイン名 SSL 証明書の構成 (Web サイトの http を https にアップグレード)

序文HTTP と HTTPS日常生活でよく使われる URL は、おおまかに次の 2 種類に分けられま...

Echarts は 1 つのグラフ内で異なる X 軸を切り替える機能を実装します (サンプル コード)

レンダリング下の画像のような効果を実現したい場合は、読み続けてアニメーション画像に直接進んでください...

MySQL エラー: ロックを取得しようとしたときにデッドロックが見つかりました。トランザクションの解決策を再起動してください

問題を見つける最近、以前のデータを入力していたときに、プログラムが突然次のエラーを報告しました。 [...

シンプルなウェブページレイアウトの構造と表現原理の共有

構造とパフォーマンスの紹介HTML 構造、CSS 表現、JavaScript 動作。Web ページの...

MySQL のインデックスとビューの使用方法と違いの詳細な説明

序文この記事では主に、MySQL のインデックスとビューの使用方法と違いを紹介し、参考と学習のために...

MySQL InnoDB ロックの概要

目次1. 共有ロックと排他ロック2. 意図ロック3. レコードロック4. ギャップロック5. ネクス...

IE で UTF8 エンコードされたページで行が理由もなく空白のままになり、UTF8 ページが表示されない問題の解決方法

理由は、すべてのファイルが utf8 でエンコードされているためです。ファイルがインクルードされると...

IEではボタンが両側に伸びる

ボタン (input, button) を記述すると、IE では次のようになります。単語数が増えると...

Centos7 で yum を使用して Mysql5.7.19 をインストールする詳細な手順

Centos7 の yum ソースには、mysql の代わりに mariaDB が使用されているため...

MySQL テーブル構造を Excel にエクスポートする方法

要件は次のとおりですテーブル構造、フィールドコメント情報、テーブル名などをエクスポートします。これは...

Windows 10 の Docker で countly-server を展開して実行するプロセス

私は最近countlyに触れて、慣れてきました。私は、必要に応じてcountlyのクラッシュプラグイ...

Vueベースのカスタムコンポーネントを実装してアイコンを導入する

序文プロジェクト開発では、アイコンを使用する方法はたくさんあります。iconfont で適切なアイコ...