Webアプリケーションのテストやスクレイピングを行う際、Seleniumは非常に役立つツールとして知られています。この記事では、Seleniumを使用してChromeブラウザのネットワークアクティビティを取得する方法について詳しく解説します。
コードの概要
上記のコードは、ChromeのDevTools Protocolを使用してネットワークリクエストの詳細情報(URL、ヘッダー、ボディ、クッキーなど)を取得するものです。
コードの詳細解説
-
必要なモジュールをインポートします。
from selenium import webdriver from selenium.webdriver.common.desired_capabilities import DesiredCapabilities import json
-
Chromeブラウザのネットワークログを取得するための設定を行います。
caps = DesiredCapabilities.CHROME caps['goog:loggingPrefs'] = {'performance': 'ALL'}
-
設定したキャパビリティを使用してブラウザを起動します。
driver = webdriver.Chrome(desired_capabilities=caps)
-
任意のURLにアクセスします。
driver.get('http://example.com')
-
ブラウザのネットワークアクティビティログを取得し、各リクエストの詳細を分析して表示します。
logs = driver.get_log('performance')
ログの中から、リクエストのURL、ヘッダー、ボディ、クッキーなどの情報を取り出して表示します。
-
最後にブラウザを閉じます。
driver.quit()
まとめ
この方法を利用すると、Webページのネットワークアクティビティの詳細を容易に取得できます。特に、APIのリクエストやレスポンスの内容を確認する際などに役立つでしょう。Seleniumを使用してさらに詳しいネットワーク解析を行いたい場合、この方法を基本として拡張していくことができます。
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import json
# ネットワークアクティビティのログを取得する設定
caps = DesiredCapabilities.CHROME
caps['goog:loggingPrefs'] = {'performance': 'ALL'}
# ブラウザを起動
driver = webdriver.Chrome(desired_capabilities=caps)
# URLにアクセス
driver.get('http://example.com')
# ログを取得し、ネットワークアクティビティを分析
logs = driver.get_log('performance')
for entry in logs:
message_data = json.loads(entry['message'])['message']['params']
# リクエスト情報が存在する場合のみ処理
if 'request' in message_data:
request_data = message_data['request']
request_url = request_data['url']
request_headers = request_data['headers']
# ボディを取得
if 'postData' in request_data:
post_data = request_data['postData']
else:
post_data = None
# クッキーはSeleniumのメソッドを利用して取得
cookies = driver.get_cookies()
print(f"URL: {request_url}")
print(f"Headers: {request_headers}")
print(f"Cookies: {cookies}")
print(f"Body: {post_data}")
print("-" * 50)
# ブラウザを閉じる
driver.quit()