Selenium は、オープン ソースで、Web ブラウザを適切にサポートする、無料のシンプルかつ柔軟な自動テスト ツールです。UI 自動化、クローラ、その他のシナリオで非常に実用的です。Selenium ツールを使いこなして上手に使用できると、効率が大幅に向上します。
セレンの概要
Selenium は、自動テストを実装するために複数のプラットフォーム、複数のブラウザ、および複数の言語をサポートしており、テストの並列実行をサポートするオープンソースでポータブルな Web テスト フレームワークであり、それによって時間を短縮し、テスト効率を向上させます。これを使用すると、マウス クリックのシミュレートやキーボード入力のシミュレートなど、プログラムが人間とまったく同じようにブラウザーの Web インターフェイスを操作できるように、関連する自動プログラムを作成できます。Web インターフェースの操作だけでなく、Web から情報を取得することもできます。比較的、情報の取得には Selenium を使用する方が簡単です。基本的な原理は、自動化プログラムを作成した後、ブラウザードライバーを使用して、ブラウザを直接操作することで、ユーザーがブラウザ上で取得できる情報はSeleniumを利用して取得することができます。
環境整備
ブラウザ ドライバをダウンロードします。ドライバのバージョンはブラウザのバージョンと一致している必要があることに注意してください。
ブラウザドライバのパスを環境変数パスに追加します。
Selenium パッケージをインストールする pip install Selenium
クイックスタート
Selenium を使用してブラウザを制御し、Baidu ホームページを開いて Alipay を検索します。
from Selenium import webdriver # Webdriver をインポート
import time
driver = webdriver.Chrome() # ブラウザドライバーを取得
driver.get(" http://www.baidu.com ") # Baidu ホームページを開く
input_box = driver.find_element_by_id('kw' ) # ホームページの入力ボックスを取得します element
input_box.send_keys('Alipay') # 入力ボックスに内容を入力します
search_button = driver.find_element_by_id('su') # ホームページの検索ボタンを取得します element
search_button.click() # をクリックします検索ボタン
time.sleep (5)
driver.quit() # ドライバーを閉じる
Selenium-API の操作 [記事の最後にある Selenium 自動テスト学習リソースの無料共有]
要素待ち
表示する 待つ
タイムアウトを設定し、要素が存在するかどうかを毎回確認し、存在する場合は以降の内容を実行し、最大時間(タイムアウト)を超えるとタイムアウト例外(TimeoutException)がスローされます。待機中を表示するには、until または not until を指定して WebDriverWait を使用する必要があります。
SeleniumインポートWebドライバーから
selenium.webdriver.support.ui から WebDriverWait をインポート
selenium.webdriver.supportからexpected_conditionsをインポートします
selenium.webdriver.common.by からインポート
ドライバー = webdriver.Chrome()
driver.get(' http://www.baidu.com ')
# 0.5 秒ごとに要素が存在するかどうかを確認し、5 秒以内に要素が見つからない場合は例外がスローされます。
要素 = WebDriverWait(ドライバー, 5, 0.5).until(
Expected_conditions.presence_of_element_located((By.ID, 'kd')), message='要素が見つかりません')
暗黙的な待機
暗黙的な待機ではタイムアウトも指定されます。指定された要素がこの時間を超えてロードされなかった場合、NoSuchElementException 例外がスローされます。スローされるさまざまな例外に加えて、もう 1 つのポイントがあります。暗黙的な待機はグローバルです。つまり、プロセスの実行中、要素を見つけることができれば、実行中のコードには影響しませんが、要素が見つからない場合は、影響を受けます。このメソッドは要素が見つかるまで要素にアクセスし続け、指定された時間を超えると例外がスローされます。implicitly_wait() を使用して暗黙的な待機を実装します。これは、明示的な待機よりもはるかに簡単に使用できます。
driver.implicitly_wait(5)
強制待機
time.sleep() を使用して待機を強制し、固定スリープ時間を設定し、要素が読み込まれるまで待機します。これはコードの実行効率に影響します。
要素の配置
Selenium は、ID、名前、クラス名、タグ名、リンク テキスト、部分リンク テキスト、Xpath、CSS セレクターという 8 つの基本的な要素配置メソッドを提供します。ここで、ID、名前、クラス名、タグ名は要素のタグに基づきます。配置のための要素の属性、リンク テキスト、部分リンク テキストはハイパーリンクのテキストに従って配置されます、xpath は要素のパスの配置、css はセレクターの配置 (スタイルの配置) です。
element = driver.find_element_by_id('kw') # id 属性を通じて要素を取得します
element = driver.find_element_by_name('wd') # name 属性を通じて要素を取得します
element = driver.find_element_by_class_name('input') # クラス属性を通じて要素を取得します
element = driver.find_element_by_tag_name('input') # タグ名で要素を取得します
element = driver.find_element_by_link_text('Video') # リンクテキスト値を通じて要素を取得します
element = driver.find_element_by_partial_link_text('view')# 部分的なリンク テキスト値を通じて要素を取得します
element = driver.find_element_by_xpath("//*[@id='kw']") # Xpath を通じて要素を取得する
element = driver.find_element_by_css_selector('#kw') # CSS セレクターを通じて要素を取得する
要素の操作
要素を見つけて要素オブジェクトを取得した後、要素に対して必要な操作を実行できます。Selenium には、要素を操作するための API が多数用意されています。一般的な操作には、クリック、入力、クリア、要素の座標値の取得、要素の幅の取得、および要素の幅の取得などがあります。高さの値、要素の属性値、要素が選択されているかどうかを確認します。
elemnet.click() # 要素をクリックします
element.send_keys('武漢') #入力内容
element.clear() # コンテンツをクリアします
element.location.get('x') # 要素の左上隅の X 軸座標を取得します
element.location.get('y') # 要素の左上隅の Y 軸座標を取得します
element.size.get('width') # 要素の幅を取得します
element.size.get('height') # 要素の高さを取得します
element.is_selected() # 要素が選択されているかどうか
マウス操作
一般的なマウス操作には、クリック、右クリック、ダブルクリック、ホバー、ドラッグなどが含まれます。Selenium は、これらのマウス操作に対応する操作メソッドをカプセル化します。
Selenium では、マウスを操作するメソッドは ActionChains クラスにカプセル化されており、ActionChains クラスで提供されるすべてのマウス イベント メソッドが呼び出されると、すべての動作が ActionChains オブジェクトに格納され、perform() メソッドがすべてのマウスを実際に実行します。イベント。
from selenium.webdriver.common.action_chains import ActionChains #导包
actionChains = ActionChains(driver) # ActionChains オブジェクトをインスタンス化する
actionChains.move_to_element(element).perform() # マウスオーバー
actionChains.drag_and_drop(elementA, elementB).perform() # マウスドラッグ
actionChains.context_click(element).perform() # マウスの右クリック
actionChains.double_click(element).perform() # マウスのダブルクリック
キーボード操作
Selenium は、Keys クラスのキーボード キーをカプセル化し、キーボード上のいくつかのキーまたはキーの組み合わせの入力をシミュレートします。Ctrl+C、Ctrl+V などのキーの組み合わせをキーボードに実装するには、send_Keys+ http://Keys.XXXを使用します。
from selenium.webdriver.common.keys import Keys # 导包
element.send_keys(Keys.BACK_SPACE) # バックスペースキーを押すことをシミュレートします
element.send_keys(Keys.CONTROL, 'a') # Ctrl+A を押すことをシミュレートします
element.send_keys(Keys.CONTROL, 'x') # Ctrl+X を押すことをシミュレートします
element.send_keys(Keys.CONTROL, 'v') # Ctrl+V を押すことをシミュレートします
ブラウザ操作
Selenium はブラウザ操作に対応する API も提供しており、一般的に使用される API には、ブラウザ ウィンドウの最大化、ブラウザ ウィンドウ サイズの設定、ブラウザの位置の設定、ブラウザの前後の制御、ページの更新などが含まれます。
driver.maximize_window() # ブラウザウィンドウを最大化する
driver.set_window_size(800, 800) # ブラウザウィンドウの幅は 800、高さは 800
driver.set_window_rect(300, 0) # ブラウザの場所 (300,0)
driver.back() # ブラウザをバックアップする
driver.forward() # ブラウザの転送
driver.refresh() # ページを更新します
その他の操作
ページをブックマークする
driver.get_screenshot_as_file('./baidu.png') # ページのスクリーンショット
driver.close() # 現在のタブページを閉じる
driver.quit() # すべてのタブを閉じる
ページ上のリンクをクリックすると、新しいタブが開きます。現時点では、Selenium は新しいタブの要素を見つけることができません。これにはハンドルの概念が関係します。ハンドルはタブ ページ オブジェクトの一意の識別子です。各タブ ページには独自のハンドルがあります。ハンドルを使用してタブ ページを切り替えることができ、それによって対応するタブ ページの要素を見つけることができます。
Handles = driver.window_handles # すべてのタブ ページのハンドルを取得します
driver.switch_to.window(handles[1]) # 指定されたハンドルタブページに切り替えます
起動パラメータ
Chrome Options は Chrome の起動プロパティを構成するクラスで、このパラメータを通じて Chrome に起動パラメータを追加できます。
Chrome バイナリ ファイルの場所を設定します (binary_location)
起動パラメータの追加 (add_argument)
拡張機能アプリケーションの追加 (add_extension、add_encoded_extension)
実験的な設定パラメータを追加 (add_experimental_option)
デバッガアドレス(debugger_address)を設定します。
Chrome オプションの一般的に使用される動作には、通常次のようなものがあります。
画像とビデオの読み込みを無効にする: Web ページの読み込み速度を向上させます。
プロキシの追加: 特定のページにアクセスするため、または IP アクセス頻度の制限に対処するために、FQ に使用されるクローリング防止テクノロジー。
モバイル ヘッダーを使用する: モバイル サイトにアクセスします。一般に、そのようなサイトのクロール防止テクノロジは比較的弱いです。
拡張機能の追加: 通常のブラウザの使用と同様の機能。
エンコードの設定:中国語のWebサイトに対応し、文字化けを防ぎます。
JavaScript の実行を防止する
UI オートメーションでブラウザを開く前に、ブラウザを構成するオプションを追加できます。さまざまなパラメータを設定することで、ブラウザのデフォルトの動作を変更できます。
SeleniumインポートWebドライバーから
options = webdriver.ChromeOptions() # 起動パラメータ オブジェクトをインスタンス化します
options.add_argument('--headless') # ビジュアル ページを提供しないようにブラウザを設定します
options.add_argument('lang=zh_CN.UTF-8') # エンコーディングを設定する
options.add_argument('--disable-infobars') # 戦略を無効にする
options.add_argument('--no-sandbox') # DevToolsActivePort ファイルが存在しないエラーを解決
options.add_argument('window-size=1920x1080') # ブラウザの解像度を指定します
options.add_argument('--disable-gpu') # Google ドキュメントには、バグを避けるためにこの属性を追加する必要があることが記載されています
options.add_argument('--incognito') # 非表示モード (シークレット モード)
options.add_argument('--disable-javascript') # javascript の禁止
options.add_argument('--start-maximized') # 最大化操作 (全画面ウィンドウ)、設定されていない場合、要素をフェッチするときにエラーが報告されます。
options.add_argument('--disable-infobars') # ブラウザが自動プログラムによって制御されていることを示すプロンプトを無効にする
options.add_argument('--hide-scrollbars') # 一部の特別なページを処理するためにスクロール バーを非表示にします
options.add_argument('blink-settings=imagesEnabled=false') # 画像をロードせず、速度を向上させます
options.add_argument('ユーザーエージェント: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML、Gecko など) Chrome/102.0.5005.63 Safari/537.36
') #UA リクエストヘッダーを設定
driver = webdriver.Chrome(chrome_options=options)
JSスクリプトを実行する
selenium が提供する API では対応できない場合や操作が面倒な場合がありますが、その場合はスライドスクロールバーを実行するなど、JS スクリプトを使用して実現できます。
js ='window.scrollTo(0,100)' # 実行されるJSスクリプト文
driver.execute_script(js) #JS スクリプトを実行
フレーム切り替え
通常、ほとんどの Web サイト ページはフレーム ネストを使用しますが、現時点では、フレーム ネストされたページのコンテンツが表示されていても、Youku のようなログイン ウィンドウなど、フレーム内の要素を直接見つけることはできません。
この時点でフレーム内の要素を操作したい場合は、まずフレームに切り替えてから配置する必要があります。
driver.switch_to.frame('alibaba-login-box') # 指定されたフレームに切り替えます
driver.switch_to.default_content() # デフォルトのページに戻る
指紋機能を非表示にする
slenium を使用して起動されたほとんどのブラウザは、フィンガープリントの特性を通じて Web サイトによって監視されます。クローラの動作が認識された場合、Selenium の操作は拒否されます。この状況を回避するには、ブラウザが検出する前にこれらの特性をどのように使用するかが重要です。それは隠されていますが、実際には、先人たちが私たちのために道を切り開いてくれました。この問題を解決する鍵は、実際には、steelth.min.js ファイルです。このファイルは、puppeteer 用です。Python で使用する場合は、このファイルを実行する必要がありますファイルの取得方法はnode.jsのインストールが必要で、端末はnpx extract-stealth-evasionsを実行してファイルをダウンロードし、ブラウザを操作する前に以下のコードを追加します。
with open('stealth.min.js') as f: js = f.read() driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {'source': js})
結論
この記事では、selenium+python のインストールと使用法、および基本的で一般的に使用される API 操作を簡単に紹介するだけですが、より深い理解と学習を必要とする高度な操作と使用法も多数あります。実際のアプリケーションでは、他のフレームワークやツールと統合する必要がある場合もあり、より深い理解と学習が必要になります。
ゼロ基礎から習得までの Python インターフェース自動テスト (2023 最新バージョン)