【Selenium】属性から要素を検索(指定):XPathの利用方法
2022.01.25 /
本記事ではPythonのSeleniumにおける、属性から要素を検索(指定)するのにXPathを利用する方法を解説していきます。
Seleniumで要素を指定する方法は様々あります。その中でもXPathを利用すると簡単に特定の要素を指定することができます。
本記事を通して以下の知識を学べます。
- Seleniumについて
- XPathについて
- XPathによる要素の取得方法
Seleniumモジュール
Seleniumとは
Seleniumはブラウザを操作・制御するのに利用されるモジュールの一つです。ブラウザを操作してWebページのボタンをクリックしたり、ページ上の情報を収集したりできます。
Seleniumは主にスクレイピングやRPAのアプリケーションで使用されます。
より詳しいSeleniumについては以下記事をご参照ください。
【Python】Selenium:ブラウザ操作して静的・動的(Ajax、javascript)ページから情報を取得
Seleniumの流れ
SeleniumでスクレイピングやRPAでブラウザを操作する際、以下の流れでアプリケーションは動きます。
- ブラウザを起動
- Webサイトへアクセス
- ページから要素を取得
- 取得した要素に対して操作(クリック、テキスト入力、情報取得)
本記事では3番「ページから要素を取得」をXPathで行う方法を解説していきます。
要素の取得(検索)
すでに説明していますが、SeleniumではWebページの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による要素の指定方法:スクレイピング・RPAで利用しよう!
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を取り入れてみてください。