1. ウェブページを開く: 初めの一歩
ウェブページの支配者になりたいと思ったことがあるなら、 この講義はピッタリだね。今日はSeleniumを使って ウェブページを開いて、それらとやり取りする技術を学ぶよ。 想像してみて、ブラウザを指揮するオーケストラの指揮者みたいに、 オーケストラがインターネットで、楽譜がPythonコードなんだ。 さあ、コンサートを始めよう!
ウェブページとやり取りをする前に、それを開く必要があるよね? それは図書館に入る前に本を探すみたいなものだ。 Seleniumではウェブページを開くのはブラウザドライバを使って行うんだ。 この時点で、君はSeleniumと対応するウェブドライバ (例えばChromeDriverやGeckoDriver)が すでにインストールされていると仮定するよ。 前回の講義を見ていれば、そのやり方が分かるはずだし、 もしまだなら、もう一度読んでみてね。
ウェブページを開く簡単な方法を見てみよう:
from selenium import webdriver
# Chrome用のウェブドライバを作成
driver = webdriver.Chrome()
# ウェブページを開く
driver.get('https://www.example.com')
# ページのタイトルをコンソールに出力
print(driver.title)
# ブラウザを閉じる
driver.quit()
コードの中で何が起きているか:
- webdriverをインポート: これはSeleniumの心臓部で、 ブラウザの操作を可能にするものだよ。
- ドライバを作成: ここではChrome用のドライバオブジェクトを作成しているよ。 これは、他のブラウザでも、対応するドライバがあれば同様に可能だ。
- ページを開く:
get()メソッドが、指定されたURLのページをロードする。 - タイトルを取得:
driver.titleを使って現在のページのタイトルを出力するんだ。 - ブラウザを閉じる:
quit()メソッドでブラウザ操作を終了する。
はい、最初のウェブページを開けたね!これは世界を制覇する第一歩だ…えっと、自動化のね!
2. ナビゲーションとタブ操作
ページを開くだけじゃ物足りないよね。時にはページ間を移動したり、 タブを開くことも必要だ。Seleniumを使うと、まるで 瞬間移動できる旅人のような気分になれるよ!
ページ移動
ページからページへ移動するのは、開くのと同じくらい簡単だよ:
# 別のページに移動
driver.get('https://www.example.org')
# back()メソッドで前のページに戻る
driver.back()
# forward()メソッドで次のページに進む
driver.forward()
タブ操作
新しいタブを開きたい?これは、いろんな街の図書館で ノートパソコンを持ち歩くようなものだね!
# 新しいタブを開いてそこに移動
driver.execute_script("window.open('https://www.example.com', '_blank');")
driver.switch_to.window(driver.window_handles[1])
# 最初のタブに戻る
driver.switch_to.window(driver.window_handles[0])
説明:
-
execute_script(): ブラウザでJavaScriptコードを実行するメソッド。ここでは新しいタブを開いているんだ。 -
switch_to.window(): このメソッドでタブ間を切り替えることができる。window_handlesを使って すべての開いているタブのリストにアクセスするよ。
3. ウェブページとのインタラクション
ページを開いて移動することを覚えたら、次は直接的なインタラクションね。 これは本物のプログラマーとしての醍醐味!ウェブページと踊るように やり取りしてみよう。
インタラクション インターフェース
ページの要素とやり取りする例を見てみよう。 例えば、テキストフィールドを見つけて文字を入力する場合:
重要: 以下の例は Selenium 3 の書き方です。Selenium 4 では find_element_by_* メソッドは削除され(4.3.0 以降は完全に)、代わりに By クラスの指定を受け取る汎用の find_element() を使います。そのため、各例のあとに Selenium 4 版を載せています。
# 名前で要素を見つける
search_box = driver.find_element_by_name('q')
# 見つけたテキストフィールドに文字を入力
search_box.send_keys('Selenium Python')
# 検索ボタンを探してクリック
submit_button = driver.find_element_by_name('btnK')
submit_button.click()
同じ内容を Selenium 4 で書くと:
# 名前で要素を見つける
search_box = driver.find_element(By.NAME, 'q')
# 見つけたテキストフィールドに文字を入力
search_box.send_keys('Selenium Python')
# 検索ボタンを探してクリック
submit_button = driver.find_element(By.NAME, 'btnK')
submit_button.click()
説明:
-
find_element_by_name(): 名前で要素を見つけるメソッド。ここでは検索用のテキストフィールドを探しているよ。 -
send_keys(): 見つけた要素に文字を入力できる。 -
click(): 要素をクリックするのに使うんだ。ボタンとかね。
追加のメソッド
要素とのやり取りをさらに複雑にするための他のメソッドもあるよ。 詳しくは Seleniumのドキュメント を見てみてね。ここでは代表的なものをいくつか紹介するよ:
-
find_element_by_id(): IDで要素を探す。 -
find_element_by_class_name(): クラスで要素を探す。 -
find_element_by_css_selector(): CSSセレクタを使って探す。
これでウェブページを開いて調査することができる、 真のウェブトラベラーになったね!新しいことに挑戦してみるのを 恐れないでね。よく言われるように、「失敗は成功への階段」だから、 コードが信頼できるものならどんどん試そう!
典型的なミス
Seleniumで作業するのは、地雷原を渡るようなものになりかねない。 よくあるミスの一つは、ブラウザセッションを終了するのを忘れること。 これが原因でブラウザプロセスがメモリ中に残っちゃうことがあるんだ。 スクリプトの最後には必ずdriver.quit()を使おう。
もう一つの問題点はウェブページの構造変更だね。 セレクタを使って見つけた要素があったとしても、 サイト開発者がHTML構造を変更したら、 突然スクリプトが動かなくなっちゃうこともあるんだ。 それはちょうど、部屋に入ろうとしていたら突然ドアが閉じられたようなもの。 柔軟なコードを書くことと、サイトの変更に合わせて定期的に更新するのが重要だよ。
GO TO FULL VERSION