1. HOME
  2. ブログ
  3. エンジニアリング
  4. 【Selenium講座】第5章: Seleniumの機能解説

BLOG

ブログ

エンジニアリング

【Selenium講座】第5章: Seleniumの機能解説

前回の章では、ウェブページの構造を理解する上で重要なDOM(Document Object Model)の概念について学びました。DOMの知識があると、Seleniumを使ってHTML要素を正確に取得したり操作することができるため、ウェブスクレイピングの基礎となります。

さて、今回の第5章では、Seleniumの具体的な機能についてさらに詳しく見ていきましょう。ブラウザの起動から始まり、ページへのアクセス、要素の取得、そして実際の操作方法まで、Seleniumの基本機能を体系的に学びます。この章を通じて、Seleniumを使って「どうやって要素を操作するか」「どのようにデータを抽出するか」を理解し、実際のウェブページに応用できるスキルを身に付けていきましょう。

講座の全体像

第1章: スクレイピング入門

第2章: 環境構築方法を解説

第3章: Seleniumの基本

第4章: DOMの基礎概念

第5章: Seleniumの機能解説

第6章: 複雑な操作を実装

第7章: 収集したデータの保存

第8章: エラーハンドリングとリトライ

ブラウザの起動

まず、Seleniumを使うには、ブラウザを起動する必要があります。最も一般的に使用されるブラウザはGoogle Chromeですが、FirefoxやEdgeなどもサポートされています。PythonのSeleniumライブラリを使用するには、最初にwebdriverモジュールをインポートし、適切なWebDriver(ChromeDriverなど)を準備します。WebDriverは、ブラウザの操作を行うためのインターフェースです。

次に、webdriver.Chrome()を使用してChromeブラウザを起動します。これにより、プログラムがブラウザを制御できるようになります。

from selenium import webdriver

# Chromeブラウザを起動
driver = webdriver.Chrome()

ページへのアクセス

ブラウザが起動したら、次に目的のウェブページにアクセスします。これはdriver.get(url)メソッドを使用して行います。このメソッドは、指定したURLをブラウザに読み込ませます。ページが完全に読み込まれるまでプログラムは待機しますが、場合によっては読み込みに時間がかかることもあるため、待機処理を適切に設定することが重要です。

driver.get("https://inusta-next.vercel.app/login")

要素の取得

ウェブページ上の特定の要素を操作するためには、その要素を取得する必要があります。Seleniumでは、find_elementメソッドを使用して要素を取得します。要素を取得する方法はいくつかあり、id、クラス名、タグ名などを利用できます。要素が見つからない場合、NoSuchElementExceptionが発生するため、例外処理を追加することも考慮すべきです。

取得した要素を操作することで、テストやデータ抽出が可能になります。

idによる要素の取得

driver.find_element(By.ID, "element_id")

クラス名による要素の取得

要素をクラス名で取得する場合は、find_elements(By.CLASS_NAME, "class_name")メソッドを使用します。このメソッドは、指定されたクラス名を持つすべての要素をリスト形式で返します。クラス名は複数の要素に共通する場合があるため、find_elementsメソッドを使うことで、複数の要素を一度に取得できます。

ただし、同じクラス名を持つ複数の要素が存在する場合、取得したリストから目的の要素を特定するためには、インデックスを指定してアクセスする必要があります。

driver.find_elements(By.CLASS_NAME, "class_name")

タグ名による要素の取得

タグ名を使用して要素を取得する方法もあります。find_elements(By.TAG_NAME, "tag_name")メソッドを使用すると、指定したタグを持つすべての要素を取得できます。例えば、すべての<p>タグを取得して、その中のテキストを表示することができます。

この方法は、同じタイプの要素を一度に操作したい場合に便利です。例えば、すべてのリンクを取得して、そのURLを表示することができます。

driver.find_elements(By.TAG_NAME, "tag_name")

name属性による要素の取得

name属性を使用して特定の要素を取得することができます。name属性は、主にフォームの入力フィールド(<input>タグや<textarea>タグ)などでよく使用される属性です。name属性による要素の取得は、find_element(By.NAME, "name_value")を使って簡単に行えます。

username_field = driver.find_element(By.NAME, "username")

データ取得

Seleniumを使用して取得した要素から、テキストや属性値を取得することができます。element.textを使用すると、要素内のテキストを簡単に取得できます。また、属性値を取得するには、get_attribute("属性名")メソッドを使用します。

たとえば、特定の画像のsrc属性を取得したい場合、element.get_attribute("src")を使うことで、その画像のURLを取得できます。これにより、ウェブページから必要なデータを抽出し、分析やレポート作成に役立てることができます。

テキストの取得

取得した要素からテキストを取得します。

element = driver.find_element(By.ID, "element_id")
print(element.text)

属性の取得

要素の属性(例: hrefやsrcなど)を取得します。

element = driver.find_element(By.ID, "element_id")
print(element.get_attribute("src"))

要素の操作

要素を取得した後は、その要素に対して操作を行います。Seleniumでは、クリックやテキストの入力、フォームの送信など、多くの操作が可能です。たとえば、ボタンをクリックする場合は、取得した要素に対してclick()メソッドを呼び出します。

要素を操作する際には、要素が表示されているか、操作可能な状態であるかを確認することが重要です。これにより、エラーを防ぎ、スムーズにスクレイピングを行えます。

クリック操作

ウェブページ上のボタンやリンクをクリックする場合、click()メソッドを使用します。例えば、特定のリンクをクリックする場合は、find_element(By.LINK_TEXT, "リンクテキスト")で要素を取得し、click()メソッドを呼び出します。

link = driver.find_element(By.LINK_TEXT, "ここをクリック")
link.click()

テキストの入力

テキストフィールドにデータを入力するには、send_keys()メソッドを使用します。例えば、ユーザー名やパスワードを入力する際に、このメソッドを使います。まず、対象の要素を取得し、send_keys("入力したいテキスト")を呼び出します。

また、テキストフィールドの内容をクリアしたい場合は、clear()メソッドを使用することもできます。これにより、以前の入力内容を削除して新しいデータを入力することが容易になります。

input_field = driver.find_element_by_name("email")
input_field.send_keys("user@example.com")

フォームの送信

フォームを送信するには、submit()メソッドを使用します。通常、フォームにはボタンがありますが、JavaScriptで動的に生成される場合もあります。フォーム要素を取得し、submit()メソッドを呼び出すことで、ボタンをクリックしたときと同様の動作が実現できます。

フォーム送信後は、遷移先のページを確認するために、適切な待機を行うことが必要です。ページの内容が変更されるため、必要に応じて新しい要素を取得し直すことになります。

form = driver.find_element(By.ID, "login_form")
form.submit()

ブラウザの操作

ブラウザの戻る・進む: ブラウザの「戻る」や「進む」ボタンを操作します。

driver.back()
driver.forward()

ブラウザの終了: 操作が完了したら、ブラウザを閉じることを忘れずに行います。

driver.quit()  # 全てのウィンドウを閉じてブラウザを終了

まとめ

この章では、Seleniumを使用したスクレイピングの基本テクニックについて詳しく学びました。

次の章では、より複雑な操作について解説し、特定の状況下での高度なテクニックや戦略を学んでいきます。実際のウェブページにおいて、どのように複雑な要素や動的コンテンツを扱うかに焦点を当てます。

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

関連記事