Webブラウザの自動操作ライブラリとして広く普及しているSeleniumですが、2026年現在、ウェブサイト側のボット検知技術はかつてないほど高度化しています。
多くのサイトは、アクセスしてきたクライアントが本物の人間が操作するブラウザであるか、それとも自動化プログラムであるかを厳格に判定しています。
その判定基準の第一歩となるのが、ブラウザから送信される「ユーザーエージェント」の情報です。
デフォルトのSelenium設定では、特定の条件下で自動操作であることが容易に特定されてしまうため、適切なユーザーエージェントの偽装は必須のスキルと言えます。
本記事では、2026年の最新環境において、Seleniumを使用してユーザーエージェントを効果的に偽装する方法とその際の注意点について詳しく解説します。
ユーザーエージェント偽装が必要とされる背景
ユーザーエージェント(UA)は、ブラウザの種類やバージョン、OSの種類などをサーバーに伝えるための文字列です。
サーバーはこの情報を元に、モバイル用レイアウトを表示するか、デスクトップ用を表示するかを判断します。
しかし、自動化ツールにおいては、このUAが「スクレイピング対策」のターゲットとなります。
デフォルト設定のままでは、特定のヘッダー情報が欠落していたり、不自然な文字列が含まれていたりすることがあります。
その結果、ウェブサイト側から「ボット」とみなされ、アクセスが遮断されたり、キャプチャ(CAPTCHA)が表示されたりするリスクが高まります。
2026年においては、単なるUA文字列の変更だけでなく、後述するUser-Agent Client Hintsへの対応も避けては通れません。
ウェブサイト側によるデバイス識別
ウェブサイトは、ユーザーが使用しているデバイスに最適化されたコンテンツを提供するためにUAを利用します。
例えば、iPhoneからのアクセスであれば、モバイル専用のUIを返却するように設計されています。
自動化プログラムでモバイル版の挙動を確認したい場合、ブラウザ側で「自分はiPhoneである」と偽装する必要があります。
スクレイピングにおける検知回避の重要性
データ収集を目的としたスクレイピングにおいて、アクセス拒否(403 Forbidden)は最大の障害です。
サイト運営者は、サーバー負荷の軽減や著作権保護のために、非正規のアクセスを排除しようとします。
ユーザーエージェントを適切に設定することで、通常のブラウザ利用を装い、これらの検知アルゴリズムを回避することが可能になります。
ChromeOptionsを使用した基本的な偽装方法
SeleniumでGoogle Chrome(ChromeDriver)を使用する場合、最も標準的な方法はChromeOptionsを利用することです。
起動時の引数としてユーザーエージェントを指定することで、ブラウザ全体の挙動を制御できます。
この手法は、ブラウザが立ち上がる前の初期化段階で設定を流し込むため、非常に安定しています。
Pythonによる実装例
以下に、Pythonを用いた基本的なユーザーエージェントの設定方法を示します。
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
# Chromeのオプションを設定
options = Options()
# 偽装したいユーザーエージェント文字列を定義
user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36"
# 引数に追加
options.add_argument(f'user-agent={user_agent}')
# WebDriverの初期化
driver = webdriver.Chrome(options=options)
# ターゲットサイトへアクセス
driver.get("https://www.google.com")
# 現在のユーザーエージェントをコンソールに表示して確認
actual_ua = driver.execute_script("return navigator.userAgent")
print(f"設定されたUA: {actual_ua}")
driver.quit()
設定されたUA: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36
この方法のメリットと限界
この方法の最大のメリットは、実装が極めて簡単であるという点にあります。
コマンドライン引数を一つ追加するだけで済むため、多くのプロジェクトで採用されています。
しかし、2026年現在のブラウザ環境では、この方法だけでは不十分なケースが増えています。
理由は、JavaScriptで取得できる「navigator.userAgentData」などの新しいAPIには、この引数が反映されないことがあるからです。
2026年の主流:User-Agent Client Hintsへの対応
近年のブラウザは、従来の長いUA文字列を廃止し、より細分化されたUser-Agent Client Hints (UA-CH)へと移行しています。
ウェブサーバーは、HTTPリクエストヘッダーのSec-CH-UAなどの項目を見て、ブラウザの詳細情報を取得します。
単にoptions.add_argumentでUA文字列だけを変えても、これらのヘッダー情報と矛盾が生じると、偽装が即座に露呈してしまいます。
Client Hintsとは何か
Client Hintsは、プライバシー保護の観点からブラウザ情報を段階的に開示するための仕組みです。
従来のUA文字列には情報が詰め込まれすぎていたため、指紋(フィンガープリント)による追跡が容易でした。
新しい仕組みでは、サーバーが明示的に要求した情報のみをブラウザが提供するようになっています。
CDP(Chrome DevTools Protocol)を活用した高度な偽装
UA-CHまで完璧に偽装するためには、SeleniumからCDP(Chrome DevTools Protocol)を直接操作する必要があります。
これにより、UA文字列だけでなく、JavaScript側で見える詳細なメタデータまで書き換えることができます。
from selenium import webdriver
driver = webdriver.Chrome()
# CDPコマンドを使用して、UA文字列とClient Hintsを同時に偽装
ua_metadata = {
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36",
"platform": "Windows",
"acceptLanguage": "ja-JP",
"userAgentMetadata": {
"brands": [
{"brand": "Not A(Brand", "version": "99"},
{"brand": "Google Chrome", "version": "121"},
{"brand": "Chromium", "version": "121"}
],
"fullVersion": "121.0.6167.140",
"platform": "Windows",
"platformVersion": "10.0.0",
"architecture": "x86",
"model": "",
"mobile": False
}
}
# ネットワーク経由でUA情報を上書き
driver.execute_cdp_cmd("Network.setUserAgentOverride", ua_metadata)
driver.get("https://bot.sannysoft.com/") # 検知確認用サイト
このコードを使用することで、JavaScript経由での検知に対しても強力な耐性を持つことができます。
特に、brandsやplatformVersionといった項目を現在の実情に合わせて設定することが、2026年の自動化において極めて重要です。
モバイルデバイスへの偽装設定
モバイルサイトのデータを取得する場合、単にUAをスマホのものにするだけでは不十分です。
画面の解像度やタッチ操作の有効化、さらにはモバイル特有のClient Hintsを設定する必要があります。
Seleniumのset_window_sizeメソッドと組み合わせて、物理的な表示領域も変更しましょう。
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
# モバイル用のUAを指定
mobile_ua = "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1"
options.add_argument(f'--user-agent={mobile_ua}')
driver = webdriver.Chrome(options=options)
# iPhone 14/15相当の画面解像度に設定
driver.set_window_size(393, 852)
driver.get("https://m.youtube.com")
モバイルデバイスの偽装を行う際には、タッチイベントの有無をチェックしているサイトがあることにも注意が必要です。
より高精度な偽装が必要な場合は、Chromeの「デバイスエミュレーションモード」をオプションで有効化する方法が推奨されます。
偽装がバレる主な原因と対策
ユーザーエージェントを変更しているにもかかわらず、アクセスがブロックされるケースは珍しくありません。
その多くは、UA情報と他のブラウザ情報の不整合に原因があります。
ここでは、2026年時点で特に注意すべきポイントを整理します。
画面解像度との不一致
デスクトップ版のUAを名乗っているのに、ウィンドウサイズが極端に小さい場合、ボットであると判定されやすくなります。
アクセス前に必ず適切なウィンドウサイズを設定し、最大化するか、一般的な解像度(1920×1080など)を指定してください。
言語設定とタイムゾーンの矛盾
日本のユーザーを装ったUAを使用しているのに、ブラウザの言語設定が英語のままになっていたり、タイムゾーンが海外であったりすると不自然です。
options.add_argument('--lang=ja-JP')を使用して、言語設定もUAに合わせることが鉄則です。
また、プロキシサーバーを経由している場合、プロキシのIPアドレスが示す地域と、ブラウザのタイムゾーン設定を一致させることも忘れないでください。
WebRTCやCanvasによる指紋
高度なセキュリティを導入しているサイトは、UA以外の情報から「ブラウザの指紋」を生成します。
これには、グラフィックボードの性能や、フォントのレンダリング結果などが含まれます。
これらを完全に偽装するのは困難ですが、Seleniumの代わりに「undetected-chromedriver」などのツールを併用することで、検知率を大幅に下げることができます。
偽装設定の比較表
紹介した各手法のメリットとデメリットを以下の表にまとめました。
| 手法 | 難易度 | 検知回避能力 | 主な用途 |
|---|---|---|---|
| ChromeOptions引数 | 低 | 低 | 簡単なスクレイピング、開発環境 |
| CDP (setUserAgentOverride) | 中 | 高 | 本格的なデータ収集、最新サイト対応 |
| Mobile Emulation | 中 | 中 | スマホ専用サイトのテスト、UI確認 |
| サードパーティ製ドライバ | 高 | 最高 | 高度なボット検知回避、商用利用 |
まとめ
2026年におけるSeleniumのユーザーエージェント偽装は、単なる文字列の書き換えだけでは通用しなくなっています。
ウェブサイト側の検知技術は日々進化しており、User-Agent Client Hintsといった新しい仕組みへの理解が不可欠です。
まずはChromeOptionsでの基本設定から始め、必要に応じてCDPを活用した高度なメタデータの書き換えに挑戦してみてください。
また、UAだけでなく、画面サイズ、言語設定、さらにはアクセス頻度といった「振る舞い」全体を人間らしく見せることが、安定した自動化への近道となります。
本記事で紹介した手法を適切に組み合わせ、マナーを守った健全なWeb自動化を実現しましょう。
