ubuntu または debian 上で Chrome と Selenium をセットアップして実行します。このガイドは ubuntu 22.04
に基づいています
Selenium は Web タスクの自動化に最適ですが、サーバー上でボットを 24 時間 365 日実行し続けるのは難しい場合があります。 systemd を使用すると、Selenium ボットをバックグラウンド サービス (デーモン) として実行でき、確実に実行され、障害時に再起動されます。このガイドでは、Linux VPS 用の構成を中心に、セットアップ手順を説明します。
目次
Google Chrome のインストール
仮想環境のセットアップ
必要なパッケージのインストール
Python スクリプトの作成
-
systemd サービスのセットアップ
- ENV 変数の追加 (オプション)
- サービスファイル
- サービスの実行
-
ブロックバッファリングの問題を修正
- -u フラグの使用
- 印刷フラッシュ引数の使用
journalctl を使用したログへのアクセス
参考資料
Google Chromeのインストール
まず、すべてのパッケージを更新します。
sudo apt update
安定した Google Chrome パッケージをダウンロードします。
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
Google Chrome をインストールします。
sudo apt install -y ./google-chrome-stable_current_amd64.deb
インストールされている Google Chrome のバージョンを確認します。
google-chrome --version
仮想環境のセットアップ
マシン上で Selenium ボットのみを実行している場合、これらの手順は必須ではありません。ただし、他のプロジェクトに取り組んでいる場合や、隔離された環境が必要な場合には、これをお勧めします。
仮想環境を作成しましょう。
python3 -m venv venv
仮想環境をアクティブ化します。
source venv/bin/activate
必要なパッケージのインストール
次に、Selenium と webdriver-manager をインストールします。
pip install selenium pip install webdriver-manager
webdriver-manger の目的は、さまざまなブラウザーのバイナリ ドライバーの管理を簡素化することです。詳細については、ドキュメントを参照してください。
Python スクリプトの作成
## main.py from selenium import webdriver ## ---- Use for type hint ---- ## from selenium.webdriver.chrome.webdriver import WebDriver ## --------------------------- ## from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options from webdriver_manager.chrome import ChromeDriverManager def create_chrome_web_driver_connection(headless: bool, detach:bool, use_sandbox: bool, use_dev_shm: bool, window_width: int = 1052, window_height: int = 825 ) -> WebDriver: service = Service(ChromeDriverManager().install()) options = Options() options.add_experimental_option("detach", detach) options.add_argument(f"--window-size={window_width},{window_height}") options.add_argument("--disable-extensions") options.add_argument("--disable-renderer-backgrounding") options.page_load_strategy = 'normal' if not use_sandbox: options.add_argument('--no-sandbox') if not use_dev_shm: options.add_argument('--disable-dev-shm-usage') if headless: options.add_argument("--headless=new") driver = webdriver.Chrome(service= service, options=options) return driver if "__main__" == __name__: driver = create_chrome_web_driver_connection(headless= True, detach= False, use_sandbox= False, use_dev_shm= False) driver.get('https://python.org') print(driver.title) driver.close()
options.add_experimental_option("detach", detach) :
- これにより、スクリプトの実行が終了した後も Chrome ブラウザを開いたままにするかどうかを構成できます。
- detach が True の場合、WebDriver セッションが終了した後もブラウザ ウィンドウは開いたままになります。
options.add_argument(f"--window-size={window_width},{window_height}") :
- これにより、ブラウザのウィンドウ サイズが幅と高さで設定されます。
必要に応じて、この行を削除できます。
Selenium をヘッドレス モードで実行する予定がある場合は、必ずこの方法でウィンドウ サイズを設定してください。そうしないと、私の経験では、デフォルトのウィンドウ サイズが小さすぎる可能性があります。このコマンド driver.get_window_size() でウィンドウ サイズを確認できます
options.add_argument("--disable-extensions") :
- 拡張機能はブラウザの自動操作を妨げる可能性があるため、拡張機能を無効にすると安定性が向上します。
options.add_argument("--disable-renderer-backgrounding") :
- これにより、Chrome がバックグラウンド タブの優先順位を下げたり、一時停止したりすることがなくなります。
- これは、複数のタブにまたがってアクションを実行する場合に便利です。
options.page_load_strategy = '通常' :
- これにより、ページの読み込み戦略が通常に設定されます。つまり、Selenium はページが完全に読み込まれるまで待機してから、以降のコマンドを続行します。
- その他のオプションには、eager (DOMContentLoaded イベントまで待機する) や none (ページのロードを待機しない) などがあります。詳細については、こちらをご覧ください。
options.add_argument('--no-sandbox') :
- サンドボックスは、ブラウザのプロセスを分離する Chrome のセキュリティ機能です。
- サンドボックスが権限の問題やクラッシュを引き起こす一部のテスト環境 (Docker コンテナ内や root ユーザーとしてスクリプトを実行する場合など) では、これを無効にする (--no-sandbox) と便利です。
options.add_argument('--disable-dev-shm-usage') :
- /dev/shm は、Linux 環境でよく使用される共有メモリ空間です。デフォルトでは、Chrome はパフォーマンスを向上させるためにこれを使用しようとします。
- これを無効にする (--disable-dev-shm-usage) と、共有メモリが制限されている環境でのクラッシュを防ぐことができます。
options.add_argument("--headless=new") :
- これにより、GUI なしで Chrome を実行するヘッドレス モードが有効になります。
- ヘッドレス モードは、CI/CD パイプラインやリモート サーバーなど、ディスプレイのない環境で実行する場合に便利です。
systemd サービスのセットアップ
ENV 変数の追加 (オプション)
Selenium プログラムで環境変数を使用する必要がある場合、これを実現するには 2 つの方法があります。
python-dotenv などのライブラリで .env ファイルを使用する (より一般的で人気のある方法)。
systemd の組み込みオプションを使用して環境ファイルをセットアップします。
この例では、2 番目のオプションを使用します。
まず、/etc ディレクトリ内に conf.d ディレクトリを作成しましょう。
sudo apt update
次に、プレーンテキストファイルを作成します(これが環境ファイルになります)。
sudo apt update
これで、作成したファイルに環境変数を追加できます。
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
環境変数を使用するように Python スクリプトを変更します。
sudo apt install -y ./google-chrome-stable_current_amd64.deb
サービスファイル
この /etc/systemd/system/ ディレクトリ内にサービス ファイルを作成する必要があります。ここは、システム管理者によってインストールされた systemd ユニットが配置される場所です。
google-chrome --version
この例では、あなたが VPS にいて、root ユーザーとしてサービスを実行すると仮定します。
[!警告]
サービスは root (管理者) 権限で実行されます。これにより、システムへの完全なアクセスが許可されますが、通常、セキュリティ上の理由で必要な場合を除き、root として実行することは避けられます。
これをサービス ファイルに追加します。
python3 -m venv venv
[単位]セクション
このセクションでは、サービスのメタデータと依存関係を定義します。
Description=Selenium Bot Service : サービスの機能の簡単な説明を提供します。この場合、「Selenium Bot Service」として説明されています。この説明は、サービスを識別するためにシステム ログと systemctl によって使用されます。
After=network.target: これにより、ネットワークが利用可能になった後にのみサービスが開始されます。 network.target は、基本的なネットワーク機能が稼働していることを示す systemd ターゲットです。
[サービス]セクション
このセクションでは、サービスの実行方法、どのユーザーが実行するか、失敗した場合の対処方法など、サービス自体の構成を指定します。
User : サービスを実行するユーザーを指定します。ここではrootに設定しています。
EnvironmentFile : サービスで使用される環境変数を含むファイルを指定します。
WorkingDirectory: サービスを実行するディレクトリを指定します。これはサービス プロセスの作業ディレクトリです。ここでは、ボット ファイルは /root/selenium_bot/
に保存されていますExecStart : サービスを開始するコマンドを定義します。ここでは、/root/selenium_bot/
にある main.py ファイルを実行します。Restart=on-failure : サービスが失敗して終了した場合 (つまり、ゼロ以外の終了ステータス)、自動的に再起動するようにサービスを構成します。これは、時折障害が発生する場合でも、ボット サービスが確実に実行され続けるようにするのに役立ちます。
RestartSec=5s : 失敗した場合の再起動間の遅延を指定します。この場合、サービスは失敗後に再起動を試みるまで 5 秒待機します。
StandardOutput=journal : サービスの標準出力 (stdout) を systemd ジャーナルにリダイレクトします。これは、journalctl を使用して表示できます。これは、ログ記録とデバッグの目的に役立ちます。
StandardError=journal : 標準エラー (stderr) 出力を systemd ジャーナルにリダイレクトします。サービスで発生したエラーはすべてログに記録され、journalctl
を使用して表示することもできます。[インストール]セクション
このセクションでは、サービスをいつどのように有効化または開始するかを定義します。
WantedBy=multi-user.target : サービスを有効にするターゲットを指定します。この場合、multi-user.target は、システムが非グラフィカル マルチユーザー モード (サーバーで一般的) のときに到達する systemd ターゲットです。これは、システムがこのターゲットに到達したとき、通常はシステムがマルチユーザー環境で起動したとき、サービスが開始されることを意味します。
systemd サービスで可能なすべての設定の詳細については、リファレンスを確認してください
サービスの実行
サービス ファイルが有効であることを確認してみましょう。すべてが正常であれば、何も表示されないはずです。
sudo apt update
systemd 構成をリロードして、新しいユニットまたは変更されたユニット (サービス) を探します。
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
サービスを開始/再起動します。
sudo apt install -y ./google-chrome-stable_current_amd64.deb
サービスを停止してください。
google-chrome --version
サービスのステータスを確認してください。
python3 -m venv venv
起動時にサービスを自動的に開始する場合は、これを実行します。
source venv/bin/activate
ブロックバッファリングの問題の修正
Python では、対話型環境でスクリプトを実行するとき (たとえば、ターミナルで python3 filename.py を手動で実行するとき)、Python は行バッファリングを使用します。これは、print() ステートメントからの出力と同様に、出力がすぐに表示されることを意味します。
ただし、Python プログラムが非対話型環境で実行される場合 (これは今回のケースです)、出力ではブロック バッファリングが使用されます。これは、バッファがいっぱいになるかプログラムが終了するまで、プログラムは出力をバッファに保持し、ログや出力が表示されるまで遅れることを意味します。
Python の出力バッファリングの仕組みについて詳しくは、こちらをご覧ください。
ログと出力をリアルタイムで表示したいため、この問題には 2 つの方法で対処できます。
-u フラグの使用
Python3 ドキュメントにはこれが記載されています。
-u stdout ストリームと stderr ストリームのバッファリングを強制的に解除します。 このオプションは標準入力ストリームには影響しません
-u フラグを使用すると、Python は stdout と stderr の両方に対して完全なバッファなしモードで動作します。これは、各バイトが生成されるとすぐに端末 (またはログ ファイルなどの出力ストリーム) に直接送信されることを意味します。バッファリングはまったく行われません。
通常 stdout に出力されるすべての文字 (print() ステートメントやエラーなど) は、行全体やバッファーが蓄積されるのを待たずに、バイト単位で即座に書き込まれます。
このオプションを使用するには、次のようにスクリプトを実行します:
sudo apt update
このオプションを使用する場合は、サービス ファイル内の ExecStart を必ず変更してください。
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
印刷フラッシュ引数の使用
Python では、print() 関数はデフォルトで出力をバッファリングします。つまり、出力はメモリに保存され、バッファがいっぱいになるかプログラムが終了した場合にのみ出力されます。 flash=True を使用すると、print() 呼び出しの直後に Python に出力を強制的にフラッシュさせ、出力がすぐに表示されるようにすることができます。
sudo apt install -y ./google-chrome-stable_current_amd64.deb
Journalctl を使用したログへのアクセス
systemd ユニット (サービス) の完全なログ履歴を表示するには、次のコマンドを使用します。
google-chrome --version
リアルタイムでログを監視するには、-f フラグを使用します。これにより、最新の日記エントリのみが表示され、日記に追加される新しいエントリが継続的に出力されます。
python3 -m venv venv
参考文献
- https://github.com/password123456/setup-selenium-with-chrome-driver-on-ubuntu_debian
- https://www.selenium.dev/documentation/webdriver/drivers/options/
- https://www.lambdatest.com/blog/selenium-page-load-strategy/
- https://pypi.org/project/webdriver-manager/
- https://pypi.org/project/python-dotenv/
- https://wiki.archlinux.org/title/Systemd
- https://man.archlinux.org/man/systemctl.1
- https://man.archlinux.org/man/systemd.service.5.en#EXAMPLES
- https://man.archlinux.org/man/systemd-analyze.1
- https://docs.python.org/3/using/cmdline.html#cmdoption-u
- https://realpython.com/python-flush-print-output/
- https://man.archlinux.org/man/journalctl.1
以上がsystemd を使用して Selenium を Linux デーモンとして設定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Pythonは、自動化、スクリプト、およびタスク管理に優れています。 1)自動化:OSやShutilなどの標準ライブラリを介してファイルバックアップが実現されます。 2)スクリプトの書き込み:Psutilライブラリを使用してシステムリソースを監視します。 3)タスク管理:スケジュールライブラリを使用してタスクをスケジュールします。 Pythonの使いやすさと豊富なライブラリサポートにより、これらの分野で優先ツールになります。

限られた時間でPythonの学習効率を最大化するには、PythonのDateTime、時間、およびスケジュールモジュールを使用できます。 1. DateTimeモジュールは、学習時間を記録および計画するために使用されます。 2。時間モジュールは、勉強と休息の時間を設定するのに役立ちます。 3.スケジュールモジュールは、毎週の学習タスクを自動的に配置します。

PythonはゲームとGUI開発に優れています。 1)ゲーム開発は、2Dゲームの作成に適した図面、オーディオ、その他の機能を提供し、Pygameを使用します。 2)GUI開発は、TKINTERまたはPYQTを選択できます。 TKINTERはシンプルで使いやすく、PYQTは豊富な機能を備えており、専門能力開発に適しています。

Pythonは、データサイエンス、Web開発、自動化タスクに適していますが、Cはシステムプログラミング、ゲーム開発、組み込みシステムに適しています。 Pythonは、そのシンプルさと強力なエコシステムで知られていますが、Cは高性能および基礎となる制御機能で知られています。

2時間以内にPythonの基本的なプログラミングの概念とスキルを学ぶことができます。 1.変数とデータ型、2。マスターコントロールフロー(条件付きステートメントとループ)、3。機能の定義と使用を理解する4。

Pythonは、Web開発、データサイエンス、機械学習、自動化、スクリプトの分野で広く使用されています。 1)Web開発では、DjangoおよびFlask Frameworksが開発プロセスを簡素化します。 2)データサイエンスと機械学習の分野では、Numpy、Pandas、Scikit-Learn、Tensorflowライブラリが強力なサポートを提供します。 3)自動化とスクリプトの観点から、Pythonは自動テストやシステム管理などのタスクに適しています。

2時間以内にPythonの基本を学ぶことができます。 1。変数とデータ型を学習します。2。ステートメントやループの場合などのマスター制御構造、3。関数の定義と使用を理解します。これらは、簡単なPythonプログラムの作成を開始するのに役立ちます。

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

Dreamweaver Mac版
ビジュアル Web 開発ツール

メモ帳++7.3.1
使いやすく無料のコードエディター
