ホームページ バックエンド開発 Python チュートリアル Selenium と Python を使用した堅牢な Web オートメーションの構築

Selenium と Python を使用した堅牢な Web オートメーションの構築

Jan 07, 2025 am 12:04 AM

Web の自動化は、現代のソフトウェア開発とテストにおいて不可欠なツールとなっています。この包括的な Selenium Python チュートリアルでは、現実世界のシナリオを処理できる堅牢な Web オートメーション フレームワークを構築する方法を学びます。 Python での自動テストの実装や、複雑な Web スクレイピング自動化ソリューションの作成に興味がある場合は、このガイドで業界でテスト済みのアプローチと Selenium のベスト プラクティスを説明します。

Web オートメーションの基礎を理解する

Web 自動化は、最新のソフトウェア開発、テスト、データ収集において不可欠です。そのアプリケーションは、Web アプリケーションのエンドツーエンドのテストから、フォームの送信や Web スクレイピングなどの反復的なワークフローの簡素化まで多岐にわたります。 Selenium WebDriver Python の統合は強力な機能を提供しますが、堅牢な Web 自動化は、単にユーザー操作を模倣するスクリプトを作成するだけではありません。それは、ターゲット Web アプリケーションへの変更に対する保守性、適応性、回復力を備えたワークフローとフレームワークを設計することです。

以下は、このチュートリアル全体で説明する重要な側面です:

  • 適切なロケーター (XPath、CSS など) の選択
  • 動的要素と状態読み込み
  • 再試行メカニズムの実装
  • ブラウザセッションを適切に管理する
  • コードの保守性構造

Selenium のベスト プラクティスを遵守しながら、これらの概念を実証するデモ サイトとして Books to Scrape を使用して、電子商取引 Web サイトの価格トラッカーのための Web スクレイピング自動化プロジェクトを構築します。

前提条件

このチュートリアルを進めるには、次のものが必要です:

  • Python 3.x がマシンにインストールされています。
  • Python プログラミングの基礎知識
  • Selenium を使用した Web スクレイピングの基礎知識

このチュートリアルのコードは github リポジトリで入手できます。自由にクローンを作成して手順に従ってください。

開発環境のセットアップ

適切な開発環境をセットアップし、必要な Python パッケージをインストールしましょう。まず、以下のコマンドを実行して、プロジェクト フォルダーと新しい仮想環境を作成します。

mkdir price_tracker_automation && cd price_tracker_automation
python3 -m venv env
source env/bin/activate
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

次に、次の Python パッケージを作成して、requirements.txt ファイルに追加します。

selenium==4.16.0
webdriver-manager==4.0.1
python-dotenv==1.0.0
requests==2.31.0
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

上記のコードでは、コアの依存関係を定義しました。 Selenium パッケージは Web 自動化フレームワークの基盤を提供し、webdriver-manager はブラウザー ドライバーの管理を自動的に処理します。 python-dotenv パッケージは環境設定用であり、requests パッケージは HTTP リクエストの処理用です。

次に、以下のコマンドを実行して、requirements.txt ファイルにすべての Python パッケージをインストールします。

pip install -r requirements.txt
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

最後に、プロジェクト用に次のフォルダー構造を作成します。

mkdir price_tracker_automation && cd price_tracker_automation
python3 -m venv env
source env/bin/activate
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

ここでは、ソフトウェア エンジニアリングのベスト プラクティスに従って、モジュール型のプロジェクト構造を確立します。 core ディレクトリには主要な自動化コンポーネントが含まれており、database はデータの永続性を処理します。

価格追跡ツールの構築

プロジェクト環境、依存関係、フォルダー構造が作成されたので、Selenium と Python を使用して価格トラッカー自動化ツールの構築に進みましょう。

ブラウザ管理システムの実装

ブラウザ管理システムを実装しましょう。これは、安定した Selenium WebDriver Python 統合のための重要なコンポーネントです。以下のコード スニペットを core/browser.py ファイルに追加します:

selenium==4.16.0
webdriver-manager==4.0.1
python-dotenv==1.0.0
requests==2.31.0
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

上記のコードは、WebDriver の初期化と構成を処理する BrowserManager クラスを作成します。このクラスは、安定性とパフォーマンスのために Chrome オプションを構成することにより、Selenium のベスト プラクティスを実装します。 headless パラメータを使用すると、ブラウザ ウィンドウを表示せずにテストを実行できます。これは CI/CD パイプラインにとって重要です。

次に、次のメソッドを BrowserManager クラスに追加して、コアのブラウザ管理機能を実装します。

pip install -r requirements.txt
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

上記のコードでは、start_browser メソッドは webdriver-manager を利用してドライバーのインストールと更新を自動的に処理し、close_browser は適切なリソースのクリーンアップを保証します。この実装には、動的ページの読み込みを適切に処理するための暗黙的な待機構成が含まれています。

要素ハンドラーの作成

次に、要素対話システムの実装に進みましょう。これは、Selenium のベスト プラクティスに従いながら、信頼性の高い方法で要素を検出して対話できるため、Web オートメーション フレームワークにおいて重要です。コード スニペットを core/element_handler.py
に追加します。

price_tracker_automation/
├── core/
│   ├── browser.py
|   ├── scraper.py
│   └── element_handler.py
├── database/
│   └── db_manager.py
├── notifications/
|   └── price_alert.py
├── requirements.txt
├── run.py
└── main.py
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

上記のコードでは、Selenium WebDriver Python インタラクション パターンをカプセル化する ElementHandler クラスを作成しました。このクラスは、WebDriver インスタンスと構成可能なタイムアウト パラメーターを受け入れます。

ElementHandler クラスを更新して、コア要素の対話メソッドを追加します。

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support import expected_conditions as EC
import logging

class BrowserManager:
    def __init__(self, headless=False):
        self.options = webdriver.ChromeOptions()
        if headless:
            self.options.add_argument('--headless')

        # Add additional stability options
        self.options.add_argument('--no-sandbox')
        self.options.add_argument('--disable-dev-shm-usage')
        self.options.add_argument('--disable-gpu')

        self.driver = None
        self.logger = logging.getLogger(__name__)
ログイン後にコピー
ログイン後にコピー

上記のメソッドは、Selenium の WebDriverWait と Expected_conditions を使用して要素を検出するため、要素が非同期で読み込まれる可能性のある動的 Web ページも処理できます。

テキスト抽出ロジックを実装する別のメソッドを追加します:

    def start_browser(self):
        """Initialize and return a ChromeDriver instance"""
        try:
 service = webdriver.ChromeService()
            self.driver = webdriver.Chrome(service=service, options=self.options)
            self.driver.implicitly_wait(10)
            return self.driver
        except Exception as e:
            self.logger.error(f"Failed to start browser: {str(e)}")
            raise

    def close_browser(self):
        """Safely close the browser"""
        if self.driver:
            self.driver.quit()
            self.driver = None
ログイン後にコピー
ログイン後にコピー

このメソッドには、Web オートメーションにおける一般的な課題である StaleElementReferenceException を処理するための再試行ロジックが含まれています。

価格トラッカーコアの実装

次に、自動テスト Python の概念と堅牢なエラー処理を組み込んだ、メインのスクレイピング機能を構築しましょう。以下のコード スニペットを core/scraper.py ファイルに追加します:

mkdir price_tracker_automation && cd price_tracker_automation
python3 -m venv env
source env/bin/activate
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

上記のコードでは、ブラウザと要素処理コンポーネントを統合する BookScraper クラスを作成しました。このクラスは、要素ロケーターを一元化し、スクレイピング操作用のクリーンな API を提供することにより、Web オートメーション フレームワーク設計の重要な概念であるページ オブジェクト モデル パターンに従います。

次に、BookScraper クラスを更新して、コア製品データ抽出メソッドを追加します。

selenium==4.16.0
webdriver-manager==4.0.1
python-dotenv==1.0.0
requests==2.31.0
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

上記の方法では、構造化されたアプローチを使用して製品情報を収集し、デバッグと監視のための詳細なログを維持します。

データベース管理のセットアップ

スクレイピングしたデータの永続ストレージを処理する、Web オートメーション フレームワークのデータベース層を実装しましょう。このコンポーネントにより、時間の経過に伴う価格の変化を追跡できるようになります。以下のコード スニペットをデータベース/db_manager.py に追加します:

pip install -r requirements.txt
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

上記のコードでは、すべてのデータベース操作を処理する DatabaseManager クラスを定義しました。データベースのセットアップと構成を避けるために、シンプルさと移植性のために SQLite を使用しました。SQLite は大量のデータを保存しないため、Web スクレイピング自動化プロジェクトにも最適です。

次に、database/db_manager.py を更新してデータベース初期化メソッドを追加します。

price_tracker_automation/
├── core/
│   ├── browser.py
|   ├── scraper.py
│   └── element_handler.py
├── database/
│   └── db_manager.py
├── notifications/
|   └── price_alert.py
├── requirements.txt
├── run.py
└── main.py
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

ここでは、SQL DDL ステートメントを使用してデータベース スキーマを確立し、価格を追跡し、保存するデータの履歴分析を実行できるようにする適切な関係と制約を備えた、製品と価格履歴用の別個のテーブルを作成します。

次に、データをデータベースに保存する別のメソッドを追加しましょう:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support import expected_conditions as EC
import logging

class BrowserManager:
    def __init__(self, headless=False):
        self.options = webdriver.ChromeOptions()
        if headless:
            self.options.add_argument('--headless')

        # Add additional stability options
        self.options.add_argument('--no-sandbox')
        self.options.add_argument('--disable-dev-shm-usage')
        self.options.add_argument('--disable-gpu')

        self.driver = None
        self.logger = logging.getLogger(__name__)
ログイン後にコピー
ログイン後にコピー

上記のコードでは、SQL インジェクションを防ぐためにパラメーター化されたクエリを使用してデータ永続化ロジックを実装しました。このメソッドは、SQLite の ON CONFLICT 句を使用して、挿入操作と更新操作の両方を処理します。

メインアプリケーションの統合

Selenium WebDriver Python 実装のすべての要素を組み込んで、すべてをメイン アプリケーション クラスと結び付けましょう。以下のコード スニペットを main.py ファイルに追加します:

    def start_browser(self):
        """Initialize and return a ChromeDriver instance"""
        try:
 service = webdriver.ChromeService()
            self.driver = webdriver.Chrome(service=service, options=self.options)
            self.driver.implicitly_wait(10)
            return self.driver
        except Exception as e:
            self.logger.error(f"Failed to start browser: {str(e)}")
            raise

    def close_browser(self):
        """Safely close the browser"""
        if self.driver:
            self.driver.quit()
            self.driver = None
ログイン後にコピー
ログイン後にコピー

上記のコードでは、Web スクレイピング自動化ソリューションのすべてのコンポーネントを調整するメインの PriceTracker クラスを作成します。 PriceTracker クラスは、モジュール性とテスト容易性を維持するために依存関係注入パターンに従います。

次に、PriceTracker クラスを更新して、コア追跡メソッドを追加します。

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException, StaleElementReferenceException

class ElementHandler:
    def __init__(self, driver, timeout=10):
        self.driver = driver
        self.timeout = timeout
ログイン後にコピー

ここでは、Web スクレイピングを処理し、スクレイピングされたデータを保存する主要な製品追跡ロジックを実装しました。

アプリケーションの実行

自動化スクリプトを実行するための実行スクリプトを作成しましょう。次のコード スニペットを run.py ファイルに追加します:

   def wait_for_element(self, locator, timeout=None):
        """Wait for element with retry mechanism"""
 timeout = timeout or self.timeout
        try:
 element = WebDriverWait(self.driver, timeout).until(
 EC.presence_of_element_located(locator)
 )
            return element
        except TimeoutException:
            raise TimeoutException(f"Element {locator} not found after {timeout} seconds")

    def get_text_safely(self, locator, timeout=None):
        """Safely get text from element with retry mechanism"""
 max_retries = 3
        for attempt in range(max_retries):
            try:
 element = self.wait_for_element(locator, timeout)
                return element.text.strip()
            except StaleElementReferenceException:
                if attempt == max_retries - 1:
                    raise
                continue
ログイン後にコピー

次に、ターミナルで次のコマンドを実行してスクリプトを実行します。

mkdir price_tracker_automation && cd price_tracker_automation
python3 -m venv env
source env/bin/activate
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

上記のコマンドの出力は、以下のスクリーンショットに表示されます。

Building Robust Web Automation with Selenium and Python

上記のスクリプトから、自動化スクリプトが指定されたすべての URL の価格を追跡していることがわかります。

価格変更を追跡する

現在の実装では、製品価格を追跡および保存するだけです。価格を追跡したら、価格トラッカーを強化して、価格の変更をユーザーに通知します。次のコード スニペットを notification/price_alert.py ファイルに追加します:

selenium==4.16.0
webdriver-manager==4.0.1
python-dotenv==1.0.0
requests==2.31.0
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

上記のコード スニペットでは、重要な依存関係を持つ PriceAlertManager クラスを作成しました。マネージャーはデータベース マネージャー インスタンスをパラメーターとして受け取り、アラート操作を追跡するためのログを設定します。このクラスは複雑な結合を使用して、現在と以前の価格を比較します。次に、動的な価格変化率の計算を実装し、価格変化情報の構造化辞書を作成しました。

次に、PriceAlertManager クラスを更新して電子メール通知機能を追加します。

pip install -r requirements.txt
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

ここでは、Python の電子メールと SMTP ライブラリを使用して電子メール通知を作成しました。この実装では、MIMEText クラスを使用して、適切にフォーマットされた電子メール メッセージを作成します。電子メールの本文は、f-strings を使用して動的に生成され、詳細な価格変更情報と正確な通貨形式が組み込まれます。

次に、価格アラートを含めるように実行スクリプトを変更しましょう:

price_tracker_automation/
├── core/
│   ├── browser.py
|   ├── scraper.py
│   └── element_handler.py
├── database/
│   └── db_manager.py
├── notifications/
|   └── price_alert.py
├── requirements.txt
├── run.py
└── main.py
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

ここでスクリプトを再度実行すると、製品の価格が追跡され、以下のスクリーンショットのように価格が変更された製品について警告が表示されます。

Building Robust Web Automation with Selenium and Python

このスクリプトを cron ジョブで実行すると、毎回手動で実行しなくても、製品の価格を追跡し、価格の変更をリアルタイムで通知できます。
例えば。 0 */6 * * * python run.py --urls
"http://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html"
"http://books.toscrape.com/catalogue/tipping-the-velvet_999/index.html"
"http://books.toscrape.com/catalogue/soumission_998/index.html"

結論

このチュートリアルを通じて、Selenium と Python を使用して堅牢な Web 自動化ツールを構築する方法を学習しました。まず Web オートメーションの基礎を理解してから、このチュートリアルのデモンストレーション用に構築した Price Traker ツールの開発環境をセットアップしました。次に、製品の価格を追跡し、価格の変更をユーザーに通知する価格トラッカー アプリケーションの構築にさらに進みました。この知識が得られたので、次はどのようなツールを構築しますか。コメント欄でお知らせください。コーディングを楽しんでください!

以上がSelenium と Python を使用した堅牢な Web オートメーションの構築の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Python vs. C:曲線と使いやすさの学習 Python vs. C:曲線と使いやすさの学習 Apr 19, 2025 am 12:20 AM

Pythonは学習と使用が簡単ですが、Cはより強力ですが複雑です。 1。Python構文は簡潔で初心者に適しています。動的なタイピングと自動メモリ管理により、使いやすくなりますが、ランタイムエラーを引き起こす可能性があります。 2.Cは、高性能アプリケーションに適した低レベルの制御と高度な機能を提供しますが、学習しきい値が高く、手動メモリとタイプの安全管理が必要です。

Pythonの学習:2時間の毎日の研究で十分ですか? Pythonの学習:2時間の毎日の研究で十分ですか? Apr 18, 2025 am 12:22 AM

Pythonを1日2時間学ぶだけで十分ですか?それはあなたの目標と学習方法に依存します。 1)明確な学習計画を策定し、2)適切な学習リソースと方法を選択します。3)実践的な実践とレビューとレビューと統合を練習および統合し、統合すると、この期間中にPythonの基本的な知識と高度な機能を徐々に習得できます。

Python vs. C:パフォーマンスと効率の探索 Python vs. C:パフォーマンスと効率の探索 Apr 18, 2025 am 12:20 AM

Pythonは開発効率でCよりも優れていますが、Cは実行パフォーマンスが高くなっています。 1。Pythonの簡潔な構文とリッチライブラリは、開発効率を向上させます。 2.Cのコンピレーションタイプの特性とハードウェア制御により、実行パフォーマンスが向上します。選択を行うときは、プロジェクトのニーズに基づいて開発速度と実行効率を比較検討する必要があります。

Python vs. C:重要な違​​いを理解します Python vs. C:重要な違​​いを理解します Apr 21, 2025 am 12:18 AM

PythonとCにはそれぞれ独自の利点があり、選択はプロジェクトの要件に基づいている必要があります。 1)Pythonは、簡潔な構文と動的タイピングのため、迅速な開発とデータ処理に適しています。 2)Cは、静的なタイピングと手動メモリ管理により、高性能およびシステムプログラミングに適しています。

Python Standard Libraryの一部はどれですか:リストまたは配列はどれですか? Python Standard Libraryの一部はどれですか:リストまたは配列はどれですか? Apr 27, 2025 am 12:03 AM

PythonListSarePartOfThestAndardarenot.liestareBuilting-in、versatile、forStoringCollectionsのpythonlistarepart。

Python:自動化、スクリプト、およびタスク管理 Python:自動化、スクリプト、およびタスク管理 Apr 16, 2025 am 12:14 AM

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

科学コンピューティングのためのPython:詳細な外観 科学コンピューティングのためのPython:詳細な外観 Apr 19, 2025 am 12:15 AM

科学コンピューティングにおけるPythonのアプリケーションには、データ分析、機械学習、数値シミュレーション、視覚化が含まれます。 1.numpyは、効率的な多次元配列と数学的関数を提供します。 2。ScipyはNumpy機能を拡張し、最適化と線形代数ツールを提供します。 3. Pandasは、データ処理と分析に使用されます。 4.matplotlibは、さまざまなグラフと視覚的な結果を生成するために使用されます。

Web開発用のPython:主要なアプリケーション Web開発用のPython:主要なアプリケーション Apr 18, 2025 am 12:20 AM

Web開発におけるPythonの主要なアプリケーションには、DjangoおよびFlaskフレームワークの使用、API開発、データ分析と視覚化、機械学習とAI、およびパフォーマンスの最適化が含まれます。 1。DjangoandFlask Framework:Djangoは、複雑な用途の迅速な発展に適しており、Flaskは小規模または高度にカスタマイズされたプロジェクトに適しています。 2。API開発:フラスコまたはdjangorestFrameworkを使用して、Restfulapiを構築します。 3。データ分析と視覚化:Pythonを使用してデータを処理し、Webインターフェイスを介して表示します。 4。機械学習とAI:Pythonは、インテリジェントWebアプリケーションを構築するために使用されます。 5。パフォーマンスの最適化:非同期プログラミング、キャッシュ、コードを通じて最適化

See all articles