[Python] Seleniumを利用してWebサイトを自在に操作する
という記事でSeleniumを利用する手順を解説しました。
本記事ではPythonのSeleniumパッケージを使って、Webサイトにログイン後、欲しい情報をスクレイピングするところまでを解説します。
スクレイピングといっても、ページ全体を読み込む訳ではなく、特定の要素のみを取得することを想定しています。

例えば、ログイン後の一部の情報が欲しい場合などを想定しています。
もちろん応用すれば色々な情報を取得することができます。
WebサイトによってはJavascriptで動的にページを生成していますが、このあたりを解説している記事が少ない印象でしたので、そのあたりの具体的な方法も解説します。
本記事の前提環境として、
- Windows 11 (64-bit)
- Python 3.13.0
- Chromeブラウザ
を想定しています。
あと、具体的なサンプルコードを解説するために、A8.netというアフィリエイトサイトを利用させてもらっています。
Seleniumを利用したWebサイトへのログイン
まずはA8.netのログイン画面を確認して、アカウント名やパスワードの要素を特定する必要があります。

要素を特定するためには、HTMLソースコードを表示したりなど色々な方法がありますが、Chromeブラウザにはデバッガーツールが標準で搭載されています。
このデバッガーツールを利用することで、HTMLソースコードを読むよりは簡単に特定できると思います。
ChromeブラウザのWebページ上で右クリックから「検証」を選択します。

デバッガーツールが表示されたと思います。

本記事では分かりやすくするために上下に表示していますが、このあたりは好みで選んでください。

特定の仕方については、まずはデバッグツール画面上の「id=”headArea”」が含まれている行にマウスを持っていくと、Webページ上の該当の要素がハイライトされます。

さらにこの <div>タグを展開して、アカウント名とパスワードの要素を特定していきます。
<div>タグの左側にある▼をクリックすることで要素を展開していくことができます。
展開しながらマウスを動かしていくと、ログイン部分がハイライトされると思います。
この部分がアカウント名とパスワードの要素となります。
- アカウント名:name=”login” または id=”asLoginId”
- パスワード:name=”passwd”
Seleniumでアカウント名やパスワードを入力する際に、この要素を指定する必要があります。

Pythonスクリプトでは以下のようにコーディングします。
A8NET_USER = "foobarbaz"
A8NET_PASS = "1q2w3e4r"
brownser = webdriver.Chrome()
brownser.get("https://www.a8.net/")
user_box = brownser.find_element(By.ID, "asLoginId")
user_box.send_keys(A8NET_USER)
pass_box = brownser.find_element(By.NAME, "passwd")
pass_box.send_keys(A8NET_PASS)
user_box.submit()
ログイン後の情報を取得する
本記事ではログイン後の今月のimp数を取得します。

まずはこの要素を特定する必要があります。
アカウント名とパスワードを特定したのと同様に、デバッガツールを利用します。
▼をクリックすることで要素を展開して、欲しいデータがハイライトされるまで辿っていきます。

「<td> 807 </td>」行を右クリックして、CopyからCopy XPathをクリックします。

XPathとして以下の文字列がコピーされます。
Seleniumは、このXPathを指定することでも要素を取得することができます。
//*[@id="reportBox00"]/table/tbody/tr[2]/td[1]
Pythonスクリプトでは以下のようにコーディングします。
xpath = '''//*[@id="reportBox00"]/table/tbody/tr[2]/td[1]'''
result = brownser.find_element(By.XPATH, xpath)
print(result.text);
サンプルコード
サンプルコード全体としては以下のようになります。
概要としては、A8.netにログインして、今月のimp数を取得することができます。
from selenium import webdriver
from selenium.webdriver.common.by import By
A8NET_USER = "foobarbaz"
A8NET_PASS = "1q2w3e4r"
browser = webdriver.Chrome()
browser.get("https://www.a8.net/")
user_box = browser.find_element(By.ID, "asLoginId")
user_box.send_keys(A8NET_USER)
pass_box = browser.find_element(By.NAME, "passwd")
pass_box.send_keys(A8NET_PASS)
user_box.submit()
xpath = '''//*[@id="reportBox00"]/table/tbody/tr[2]/td[1]'''
result = browser.find_element(By.XPATH, xpath)
print(result.text);
browser.quit()
「myselenium.py」として保存して実行すると、Chromeブラウザが起動して、A8netにログインしていることが分かります。
コンソール上では取得したいデータが出力されます。
> python myselenium.py
DevTools listening on ws://127.0.0.1:63572/devtools/browser/096ab08e-e927-468c-a68d-937877315cfe
807
>
まとめ
本記事ではPythonのSeleniumパッケージを使って、Webサイトにログイン後、欲しい情報をスクレイピングするところまでを解説しました。
Chromeブラウザのデバッグツールを使うことで、比較的簡単に要素を特定することができます。
コメント