1. 要素検索の基本
要素検索の方法
コードに飛び込む前に、まずSeleniumを使ってWebページ上の要素をどのように検索するのかを理解しておくことが大切だね。 Seleniumにはいくつか便利な方法が用意されていて、要素を探すことができるんだ:
-
find_element_by_id(): 要素をそのユニークな識別子(id)で検索する。 -
find_element_by_name(): 要素をそのname属性で見つける。 -
find_element_by_class_name(): 特定のクラス(class)を持つ要素を検索する。 -
find_element_by_tag_name(): タグ名を使って要素を検索する。例えば、div、p、a。
最初は簡単な例から始めよう。idを使った要素の検索だよ。例えば「魔法のボタン」というラベルを持つボタンを探してみよう:
from selenium import webdriver
# ドライバの設定とブラウザを開く
driver = webdriver.Chrome()
driver.get('https://example.com')
# idで要素を検索する
magic_button = driver.find_element_by_id('magic_button_id')
# 見つけた要素を操作する(例: テキストを取得)
print(magic_button.text)
# セッションを終了する
driver.quit()
見つけた要素の操作
要素を見つけたら次はどうするかを決める番だね。Seleniumのメソッド、たとえばtextで要素のテキスト内容を取得したり、 get_attribute('attribute_name')で要素の特定の属性値を取得したりできるよ。
例えば、リンク要素があったとして、そのリンク先を知りたい場合はどうするのか、こうやればいいよ:
# リンク要素を検索する
link_element = driver.find_element_by_class_name('link_class')
# href属性からURLを取得する
link_url = link_element.get_attribute('href')
print(f'このリンク先は: {link_url}')
2. メソッド find_element_by_id()
find_element_by_id() メソッドは、Webページ上の要素を検索する最速かつ確実な方法のひとつだよ。 このメソッドは、要素をユニークなid属性で探すことができるから。HTMLではid属性が一意の識別子だから、 このメソッドは特定の要素を1つだけ返すことを保証するんだ。
使用例:
element = driver.find_element_by_id("submit-button")
この例では、Seleniumがid="submit-button" を持つ要素を探して、それを変数elementに保存しているんだ。 フォームのボタンや入力フィールドなど、ページ上であまり重複しないユニークな要素を検索するのに便利だよ。
いつ使う?
要素にユニークなidが付いている場合は、find_element_by_id()の使用が推奨されるよ。 このメソッドは迅速かつ正確な要素へのアクセスを提供してくれる。
3. メソッド find_element_by_name()
find_element_by_name() メソッドはname属性で要素を検索するためのものだよ。 フォームや入力フィールドによく使われる。要素が同じクラスやidを持っていても、異なるnameで識別することができるんだ。 idとは異なり、name属性は必ずしもユニークである必要はないから、 同じnameを持つ複数の要素がページ上に存在する場合もあるよ。
使用例:
element = driver.find_element_by_name("username")
このコードでは、name="username" を持つ要素を検索している。通常、ログインフォームでのユーザー名入力フィールドとして使われる。
いつ使う?
ページ上で要素にユニークなidがない場合で、name属性が指定されている場合に、このメソッドは便利だよ。 特に、多くのフォーム入力ではnameで識別されることが多いからね。
4. メソッド find_element_by_class_name()
find_element_by_class_name() メソッドは、そのクラス(class)を元にして要素を検索するものだよ。 CSSのクラス名を使って、同じスタイル設定を持つ要素を探すのが簡単になる。ただし、classは複数要素に割り当てられることも多いので、 ユニークなクラスを探すか、他の方法を組み合わせて検索した方がいい場合もあるよ。
使用例:
element = driver.find_element_by_class_name("main-header")
この例では、Seleniumが最初のmain-header クラスを持つ要素を探している。
いつ使う?
find_element_by_class_name()は、ヘッダーやボタン、その他のスタイルが設定されてる要素を探すのに便利だよ。 要素にユニークなidやnameがない場合に特に役立つね。
5. 特徴とエラー
次に進む前に少し詳しく話そう。時々、ボタンや画像のような要素はユニークなidやクラスを持たないことがあるんだ。 そんな時はXPathやCSSセレクタのようなもっと高度な検索方法が役立つよ。次の講義でこれらについて話すから、心配しなくても大丈夫。
セレクタの脆弱性
idやclassといった属性を扱うときは、それらが変更される可能性があることに注意してね。 特に動的に生成されるページでは、識別子がランダムに変化することがあるんだ。解決策? より安定した属性を使うか、複合的な方法を採用しよう。
GO TO FULL VERSION