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

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 までご連絡ください。
Python vs. C:重要な違​​いを理解しますPython vs. C:重要な違​​いを理解しますApr 21, 2025 am 12:18 AM

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

Python vs. C:プロジェクトのためにどの言語を選択しますか?Python vs. C:プロジェクトのためにどの言語を選択しますか?Apr 21, 2025 am 12:17 AM

PythonまたはCの選択は、プロジェクトの要件に依存します。1)迅速な開発、データ処理、およびプロトタイプ設計が必要な場合は、Pythonを選択します。 2)高性能、低レイテンシ、および緊密なハードウェアコントロールが必要な場合は、Cを選択します。

Pythonの目標に到達する:毎日2時間のパワーPythonの目標に到達する:毎日2時間のパワーApr 20, 2025 am 12:21 AM

毎日2時間のPython学習を投資することで、プログラミングスキルを効果的に改善できます。 1.新しい知識を学ぶ:ドキュメントを読むか、チュートリアルを見る。 2。練習:コードと完全な演習を書きます。 3。レビュー:学んだコンテンツを統合します。 4。プロジェクトの実践:実際のプロジェクトで学んだことを適用します。このような構造化された学習計画は、Pythonを体系的にマスターし、キャリア目標を達成するのに役立ちます。

2時間の最大化:効果的なPython学習戦略2時間の最大化:効果的なPython学習戦略Apr 20, 2025 am 12:20 AM

2時間以内にPythonを効率的に学習する方法は次のとおりです。1。基本的な知識を確認し、Pythonのインストールと基本的な構文に精通していることを確認します。 2。変数、リスト、関数など、Pythonのコア概念を理解します。 3.例を使用して、基本的および高度な使用をマスターします。 4.一般的なエラーとデバッグテクニックを学習します。 5.リストの概念を使用したり、PEP8スタイルガイドに従ったりするなど、パフォーマンスの最適化とベストプラクティスを適用します。

PythonとCのどちらかを選択:あなたに適した言語PythonとCのどちらかを選択:あなたに適した言語Apr 20, 2025 am 12:20 AM

Pythonは初心者やデータサイエンスに適しており、Cはシステムプログラミングとゲーム開発に適しています。 1. Pythonはシンプルで使いやすく、データサイエンスやWeb開発に適しています。 2.Cは、ゲーム開発とシステムプログラミングに適した、高性能と制御を提供します。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

Python vs. C:プログラミング言語の比較分析Python vs. C:プログラミング言語の比較分析Apr 20, 2025 am 12:14 AM

Pythonはデータサイエンスと迅速な発展により適していますが、Cは高性能およびシステムプログラミングにより適しています。 1. Python構文は簡潔で学習しやすく、データ処理と科学的コンピューティングに適しています。 2.Cには複雑な構文がありますが、優れたパフォーマンスがあり、ゲーム開発とシステムプログラミングでよく使用されます。

1日2時間:Python学習の可能性1日2時間:Python学習の可能性Apr 20, 2025 am 12:14 AM

Pythonを学ぶために1日2時間投資することは可能です。 1.新しい知識を学ぶ:リストや辞書など、1時間で新しい概念を学びます。 2。練習と練習:1時間を使用して、小さなプログラムを書くなどのプログラミング演習を実行します。合理的な計画と忍耐力を通じて、Pythonのコアコンセプトを短時間で習得できます。

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

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

See all articles

ホット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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

EditPlus 中国語クラック版

EditPlus 中国語クラック版

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

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。