【Selenium】属性から要素を検索(指定):XPathの利用方法

時計 2022.01.25 / 時計

【Selenium】属性から要素を検索(指定):XPathの利用方法

本記事ではPythonSeleniumにおける、属性から要素を検索(指定)するのにXPathを利用する方法を解説していきます。

Seleniumで要素を指定する方法は様々あります。その中でもXPathを利用すると簡単に特定の要素を指定することができます。

本記事を通して以下の知識を学べます。

学べる知識
  • Seleniumについて
  • XPathについて
  • XPathによる要素の取得方法

Seleniumモジュール

Seleniumとは

Seleniumはブラウザを操作・制御するのに利用されるモジュールの一つです。ブラウザを操作してWebページのボタンをクリックしたり、ページ上の情報を収集したりできます。

Seleniumは主にスクレイピングやRPAのアプリケーションで使用されます。

より詳しいSeleniumについては以下記事をご参照ください。

Seleniumの流れ

SeleniumでスクレイピングやRPAでブラウザを操作する際、以下の流れでアプリケーションは動きます。

  1. ブラウザを起動
  2. Webサイトへアクセス
  3. ページから要素を取得
  4. 取得した要素に対して操作(クリック、テキスト入力、情報取得)

本記事では3番「ページから要素を取得」をXPathで行う方法を解説していきます。

要素の取得(検索)

すでに説明していますが、SeleniumではWebページのHTMLから操作したい要素を特定する必要があります。

HTMLの要素は開始タグから終了タグまですべてを含みます。

htmlの要素の構成

この要素を指定する際に利用するのがfind_element_by_*メソッドです。CSSセレクタや属性で要素を指定することができます。

以下表では変数driverに格納されたWebDriverオブジェクトに対してのメソッド実行方法を示しています。

指定要素 メソッド
CSSセレクタ driver.find_element_by_css_selector(CSS selector)
id属性 driver.find_element_by_id(id)
class属性 driver.find_element_by_class_name(class name)
name属性 driver.find_element_by_name(name)
タグ名 driver.find_element_by_tag_name(tag)
XPath driver.find_element_by_xpath(XPath)

idやclass、name属性で指定して検索することもできますが、XPathでの指定がとても便利です。

次にXPathについて見ていきましょう。

XPath

XPathとは

XPath(エックスパス)とはXMLやHTML文書から要素や属性を指定するクエリ言語です。

Webページから要素をタグ名や属性を利用して簡単に指定できます。

XPathの記入法も少し勉強すれば使えるようになります。要素の特定が簡単にできるため、スクレイピングやRPAで要素を指定するのに適しています。

XPathについて詳しくは以下記事をご参照ください。

XPathによる要素の取得:find_element_by_xpath()

find_element_by_xpath()の利用

WebDriverオブジェクトに対してfind_element_by_xpath()メソッドを使用することでXPathで要素を指定できます。

構文

driver.find_element_by_xpath("XPath")

条件にマッチする要素をWebElementオブジェクトで返します。

サンプルプログラム

例として本サイトOFFICE54のホームページにアクセスして、カテゴリーの1つ「Python」をクリックするプログラムを以下に記します。

from selenium.webdriver.support.ui import WebDriverWait
from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument('--disable-gpu');
options.add_argument('--disable-extensions');
options.add_argument('--proxy-server="direct://"');
options.add_argument('--proxy-bypass-list=*');
options.add_argument('--start-maximized');
chromedriver = 'chromedriver.exe'
driver = webdriver.Chrome(executable_path=chromedriver, chrome_options=options)
driver.implicitly_wait(30)

# OFFICE54をブラウザで開く
driver.get("https://office54.net/")
# Pythonボタンの要素をXPathで取得する
element_python = driver.find_element_by_xpath("//ul[@class='category-name']/li[2]/a")
# Pythonボタンをクリックする
element_python.click()

このようにXPathで要素を特定し、クリックなどの操作を行うことができます。

まとめ

本記事「【Selenium】属性から要素を検索(指定):XPathの利用方法」はいかがでしたか。

XPathはPythonでスクレイピングやRPAのアプリケーションを作成するなら、必ず覚えておくべき知識です。

今まで使ってこなかった方はぜひXPathを取り入れてみてください。