ChromeブラウザでHTTPリクエストヘッダーに独自のパラメータを追加する方法はいくつかあります。以下に説明します:
方法 1: Selenium DevTools Protocolを利用
SeleniumのDevTools Protocolを使うと、HTTPリクエストを直接操作してカスタムヘッダーを追加できます。
サンプルコード:
from selenium import webdriver
Chrome Driverの作成
driver = webdriver.Chrome()
DevToolsプロトコルを有効化
driver.execute_cdp_cmd("Network.enable", {})
カスタムHTTPヘッダーを設定
driver.execute_cdp_cmd("Network.setExtraHTTPHeaders", {
"headers": {
"Custom-Header": "CustomValue", # 独自のパラメータ
"Another-Header": "AnotherValue"
}
})
ターゲットURLを開く
driver.get("https://example.com")
ブラウザを終了
driver.quit()
方法 2: Chrome拡張機能を使用
Modify HeaderなどのChrome拡張機能や自作の拡張を使ってリクエストヘッダーを変更・追加できます。
自作拡張の例:
1. manifest.jsonを作成:
{
"manifest_version": 3,
"name": "Add Custom Header",
"version": "1.0",
"permissions": ["webRequest", "webRequestBlocking", "storage", "activeTab"],
"host_permissions": [""],
"background": {
"service_worker": "background.js"
}
}
2. background.jsでヘッダーを追加:
chrome.webRequest.onBeforeSendHeaders.addListener(
function(details) {
details.requestHeaders.push({name: "Custom-Header", value: "CustomValue"});
return {requestHeaders: details.requestHeaders};
},
{urls: [""]}, // 全てのURLを対象
["blocking", "requestHeaders"]
);
3. Seleniumで拡張機能を読み込む:
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument("--load-extension=/path/to/your/extension") # 拡張機能のパス
driver = webdriver.Chrome(options=options)
driver.get("https://example.com")
方法 3: プロキシを使ってリクエストを改変
MitmproxyやFiddlerなどのプロキシツールを使えば、リクエストを傍受してヘッダーを追加できます。
サンプルコード(Mitmproxyスクリプト):
1. modify_headers.pyというスクリプトを作成:
from mitmproxy import http
def request(flow: http.HTTPFlow) -> None:
flow.request.headers["Custom-Header"] = "CustomValue"
2. SeleniumでMitmproxyを利用:
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument("--proxy-server=http://127.0.0.1:8080") # Mitmproxyのプロキシアドレス
driver = webdriver.Chrome(options=options)
driver.get("https://example.com")
Mitmproxyを起動すると、すべてのリクエストが改変されます。
方法 4: fetchまたはXMLHttpRequestでヘッダーを変更
JavaScriptを直接実行できる場合、fetchやXMLHttpRequestを使ってヘッダーを追加できます。
サンプル:
fetch("https://example.com", {
method: "GET",
headers: {
"Custom-Header": "CustomValue"
}
}).then(response => response.text())
.then(data => console.log(data));
このスクリプトをSeleniumのexecute_scriptでブラウザ内に実行:
script = """
fetch("https://example.com", {
method: "GET",
headers: {
"Custom-Header": "CustomValue"
}
}).then(response => response.text())
.then(data => console.log(data));
"""
driver.execute_script(script)
まとめ
• ブラウザ全体でカスタムヘッダーを使いたい場合:Chrome拡張を使うのがおすすめ。
• 自動化が目的の場合:SeleniumのDevTools Protocolが最も簡単。
• 柔軟性を重視する場合:Mitmproxyなどのプロキシツールを利用。