Webスクレイピングやブラウザ自動化において、対象となるWebサイトの基本情報を取得することは、処理の成否を判定したり、収集データを整理したりするための第一歩となります。
特に「ページタイトル」「現在のURL」「HTMLソースコード」の3点は、自動化プログラムのデバッグやデータ解析において欠かせない要素です。
PythonとSeleniumを組み合わせることで、JavaScriptによって動的に生成されるコンテンツを含む最新のWebサイトからも、これらの情報を確実かつ容易に取得できます。
本記事では、2026年時点での最新のライブラリ仕様に基づき、それぞれの情報を取得する具体的な実装方法と、実務で役立つTipsを詳しく解説します。
Seleniumで基本情報を取得する準備
Seleniumを利用してブラウザ操作を行うには、まず環境構築が必要です。
現在ではWebDriver Managerなどの機能がSelenium本体に統合されており、以前のように手動でドライバをダウンロードしてパスを通す手間が大幅に削減されています。
必要なライブラリのインストール
まずは、Python環境にSeleniumがインストールされているか確認しましょう。
未インストールの場合は、以下のコマンドを使用してインストールを行います。
pip install selenium
WebDriverの初期化と基本設定
ブラウザを制御するためには、WebDriverのインスタンスを生成する必要があります。
ここでは、Google Chromeを使用した標準的なセットアップ例を紹介します。
ヘッドレスモード(ブラウザを表示しない設定)を有効にすることで、サーバー上での実行やバックグラウンド処理もスムーズに行えます。
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
# ブラウザのオプション設定
options = Options()
# ヘッドレスモードを有効にする場合(必要に応じてコメントアウトを解除)
# options.add_argument("--headless")
# WebDriverのインスタンス化
driver = webdriver.Chrome(options=options)
# 任意のURLにアクセス
target_url = "https://www.example.com"
driver.get(target_url)
これで、特定のWebページにアクセスし、情報を取得する準備が整いました。
ページタイトルの取得方法
Webページのタイトルは、ブラウザのタブに表示される文字列であり、HTMLの<title>タグの内容を指します。
Seleniumでは、titleプロパティを参照するだけで簡単に取得できます。
プロパティを使用したタイトル取得
タイトル情報の取得は、ページが正しくロードされているかを確認するための簡易的なバリデーションとして非常によく使われます。
# ページタイトルの取得
page_title = driver.title
print(f"取得したタイトル: {page_title}")
取得したタイトル: Example Domain
タイトル取得の活用シーン
ページタイトルの取得は、単に名前を記録するだけでなく、「意図したページに遷移したか」のチェックに利用されます。
例えば、ログイン処理の後にタイトルを確認し、期待される文言が含まれていなければエラーとして処理を中断するといったロジックが一般的です。
ただし、SPA (Single Page Application) などのモダンなサイトでは、ページ遷移時にタイトルが遅れて更新されることがあるため、必要に応じて後述する「待機処理」を組み合わせることが推奨されます。
現在のURLを取得する方法
リダイレクトが発生するサイトや、複数のリンクを巡回するスクレイピングでは、現在ブラウザがどのURLを表示しているかを把握することが重要です。
Seleniumではcurrent_urlプロパティを使用してこれを取得します。
URL情報の取得
URLを取得することで、動的に生成されたURLパラメータの解析や、正規化されたURLの保存が可能になります。
# 現在のURLを取得
current_url = driver.current_url
print(f"現在のURL: {current_url}")
現在のURL: https://www.example.com/
URL取得の重要性
現代のWebサイトでは、広告の計測タグやアフィリエイトリンク、セッション維持のためのパラメータがURLに付与されることが多々あります。
また、短縮URLをクリックした後に、最終的にどのページに到達したかを記録する際にも、このcurrent_urlプロパティが活躍します。
特に「意図しないページ外への遷移」を検知するために、ループ処理の中で定期的にURLをチェックする手法は、堅牢なスクレイピングプログラムを作成する上で非常に有効です。
HTMLソースコードを取得する方法
Webページの内容を解析したり、Selenium以外のライブラリ(BeautifulSoupなど)にデータを渡したりする場合、ページのHTMLソース全体を取得する必要があります。
これにはpage_sourceプロパティを使用します。
ページ全体のソース取得
このプロパティは、実行時点でのDOMの状態を文字列として返します。
JavaScriptによって実行中に書き換えられた内容も反映された「レンダリング後」の状態を取得できるのが、Seleniumを利用する大きなメリットです。
# HTMLソースコードの取得
html_content = driver.page_source
# 冒頭200文字を表示
print(html_content[:200])
<html lang="ja"><head>
<title>Example Domain</title>
<meta charset="utf-8">
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
...
BeautifulSoupとの連携
Seleniumはブラウザの操作(クリックやスクロール)には長けていますが、HTMLソース内の特定の要素を高速に検索・抽出する処理については、BeautifulSoupなどの解析専門ライブラリに任せる方が効率的です。
| ツール | 得意な処理 | 推奨される用途 |
|---|---|---|
| Selenium | ブラウザ操作、JavaScript実行、動的コンテンツ待機 | ページの遷移、ログイン、動的データの読み込み |
| BeautifulSoup | HTMLのパース、タグ検索、テキスト抽出 | 取得済みHTMLからのデータ加工、高速な情報抽出 |
以下は、Seleniumで取得したソースをBeautifulSoupに渡す典型的なパターンです。
from bs4 import BeautifulSoup
# Seleniumで取得したHTMLをBeautifulSoupに渡す
soup = BeautifulSoup(driver.page_source, "html.parser")
# 特定のタグを検索
h1_text = soup.find("h1").text
print(f"H1タグの内容: {h1_text}")
確実に情報を取得するための待機処理
モダンなWebサイトでは、ページが読み込まれた直後にJavaScriptが走り、後からタイトルやコンテンツが更新されることが珍しくありません。
ページ遷移直後に情報を取得しようとすると、「古い情報」や「空の情報」を取得してしまうリスクがあります。
これを防ぐためには、特定の条件が満たされるまでプログラムを待機させる必要があります。
明示的待機 (Explicit Wait) の利用
Seleniumでは、WebDriverWaitを使用して、特定の要素が現れるまで、あるいはタイトルが特定の文字列に変わるまで待機することが可能です。
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 最大10秒間、タイトルが確定するまで待機
wait = WebDriverWait(driver, 10)
wait.until(EC.title_contains("Example"))
# 確定後に情報を取得
print(f"確定後のタイトル: {driver.title}")
この処理を入れることで、ネットワークの遅延やサイトの読み込み速度に左右されない、再現性の高いスクリプトを作成できます。
実践コード:一括取得とファイル保存
これまでに解説した内容を統合し、実務で使える形式のスクリプトを作成しましょう。
取得した情報を整理して表示し、HTMLソースをファイルとして保存する一連の流れを以下に示します。
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
def export_page_info(url):
options = Options()
options.add_argument("--headless")
driver = webdriver.Chrome(options=options)
try:
# ターゲットURLへアクセス
driver.get(url)
# 動的コンテンツの読み込みを考慮して少し待機
time.sleep(3)
# 各種情報の取得
title = driver.title
current_url = driver.current_url
source = driver.page_source
print("-" * 30)
print(f"取得完了: {title}")
print(f"URL: {current_url}")
print("-" * 30)
# ソースコードをファイルに保存
file_name = "page_source.html"
with open(file_name, "w", encoding="utf-8") as f:
f.write(source)
print(f"HTMLソースを {file_name} に保存しました。")
except Exception as e:
print(f"エラーが発生しました: {e}")
finally:
# ブラウザを閉じる
driver.quit()
if __name__ == "__main__":
export_page_info("https://www.example.com")
コードのポイント
- headless設定: 実際の運用を想定し、画面を表示させずに処理を行う設定を入れています。
- try-finally構文: 処理中にエラーが発生しても、必ず
driver.quit()が実行されるようにし、メモリリークを防ぎます。 - エンコーディング指定: HTMLファイルを保存する際、日本語の文字化けを防ぐために
encoding="utf-8"を明示しています。
取得時の注意点とトラブルシューティング
情報を取得する際、いくつかの注意点があります。
特に大規模なサイトやセキュリティの厳しいサイトを対象にする場合は、以下の点に留意してください。
iframe内の情報取得
ページ内に<iframe>が使われている場合、単にpage_sourceを取得してもiframe内部のHTMLは完全には取得できない場合があります。
その際は、driver.switch_to.frame()を使用して、操作対象をiframeの中に切り替えてから情報を取得する必要があります。
実行速度と負荷
page_sourceは非常に大きな文字列データになることがあります。
数千ページにわたってソース全体をメモリに保持したり、頻繁に取得したりすると、実行環境のメモリ不足や、相手サーバーへの過度な負荷(DoS攻撃とみなされる恐れ)につながります。
必要な情報を取得したら、速やかにファイルへ書き出すか、解析を終えて変数を解放するようにしましょう。
動的な要素変更
タイトルやURLは、ユーザーの操作(ボタンクリックなど)によってJavaScriptで動的に書き換わることがあります。
遷移を伴わないURLの変化(ハッシュフラグメント # の変更など)もcurrent_urlで取得可能ですが、そのタイミングを正確に捉えるために、「URLが変更されるまで待機する」といったロジックが必要になるケースがあります。
まとめ
PythonとSeleniumを活用することで、Webページのタイトル、URL、HTMLソースという3つの基本情報を確実に取得できます。
これらはWebスクレイピングの基礎でありながら、データの整合性を保ち、自動化処理の信頼性を高めるために極めて重要な役割を果たします。
- タイトルは
driver.titleで取得し、ページの正当性確認に利用する。 - URLは
driver.current_urlで取得し、リダイレクト先やパラメータの確認に利用する。 - ソースコードは
driver.page_sourceで取得し、詳細なデータ解析のためにBeautifulSoupなどへ渡す。
これらの基本プロパティに加え、適切な待機処理(WebDriverWait)を組み合わせることで、複雑な動的サイトにも対応可能な強力な自動化ツールを構築できます。
まずは本記事のサンプルコードをベースに、対象サイトに合わせたカスタマイズを試してみてください。
