【Python】SeleniumをつかったWEB操作の自動化

Python

Pythonのライブラリのひとつ「Selenium」をつかったWEB操作の自動化の方法をご紹介します。基本的な一連の動作をまとめていますので、はじめての場合でもまずは一度お試しください。

スポンサーリンク

Seleniumとは

Seleniumとは、WEB操作を自動化するためのライブラリです。

Seleniumをうまく使えば、キーボード入力やマウス操作などによる「WEBブラウザでのいつもの操作」を自動化することができます。

WebDriverとは

WebDriverとは、WEBブラウザを操作するために必要なライブラリです。

WEBブラウザの種類に応じたドライバーをつかって操作をします。
例えば、Googleの「Chrome」の操作には「ChromeDriver」、Microsoftの「Edge」の操作には「Microsoft Edge Driver」を使用します。

WebDriverManagerとは

「WebDriverManager」 とは、「Webブラウザのバージョン」に合わせたドライバーを自動的にダウンロードするためのライブラリです。

WEB操作の自動化において便利なSeleniumですが、「WEBブラウザのバージョン」と「ドライバーのバージョン」を一致させる必要があります。それぞれのバージョンが一致していない場合は正しく動作しませんので、定期的にドライバーの更新が必要になるケースがあります。

このような定期的なドライバーの手動更新の回避策として「WebDriverManager」を使う方法があります。

「WebDriverManager」を使えば、「WEBブラウザのバージョン」に合わせて適切な「ドライバーのバージョン」を自動的に一致させることができるため、バージョン違いによるエラーを回避することができます。

サンプルコード

「Chrome」で「WebdriverManager」をつかったWEB操作の自動化の例をご紹介します。

事前準備

あらかじめpipをつかって「WebdriverManager」をインストールしておきます。

pip install webdriver-manager

インポート

まずは必要なライブラリをインポートします。

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from time import sleep

「WebdriverManager」の設定

「WebdriverManager」の設定をします。

こちらのコードにより「WEBブラウザのバージョン」にあったドライバーをプログラム実行のたびにインストールすることができます。

browser = webdriver.Chrome(ChromeDriverManager().install())

「implicitly_wait」の設定

「implicitly_wait」を使ってWEB操作の待機設定をします。
指定した要素が見つかるまで、引数に入力した値の秒数を待機させることができます。

たとえば、こちらの設定では「指定した要素が見つかるまで10秒待機」といった指示になります。

browser.implicitly_wait(10)

遅延処理には、WEBページのロードが完了する前にプログラムが次の処理をはじめることを防止する目的があります。

URLの指定

URLを指定してWEBページを開きます。

こちらでは、変数「url」にSeleniumの公式ドキュメントのURLを代入しています。

url = "https://www.selenium.dev/ja/documentation/" 
browser.get(url)

待機

「sleep関数」をつかって「10秒間」待機させます。

こちらは指定したWEBページが期待どおりに開いていることを確認する目的で設定しています。

sleep(10)

ページの移動

HTMLの「id属性」の値を指定することによって要素を取得することができます。

こちらでは公式ドキュメントのページ内の「概要」を指定したうえでクリックをしています。

overview = browser.find_element_by_id("m-jadocumentationoverview")
overview.click()

「id属性」以外にもさまざまな方法でHTMLの要素を指定することができます。

待機

動作確認のために 「10秒間」待機させます

sleep(10)

ブラウザの終了

さいごにブラウザを終了させます。

browser.quit()

まとめ|一連のコード

今回ご紹介した一連のコードはこちらです。

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from time import sleep

browser = webdriver.Chrome(ChromeDriverManager().install())

browser.implicitly_wait(10)

url = "https://www.selenium.dev/ja/documentation/" 
browser.get(url)

sleep(10)

overview = browser.find_element_by_id("m-jadocumentationoverview")
overview.click()

sleep(10)

browser.quit()

Selenium|基本的な使い方

Seleniumを使ってできる代表的なことをご紹介しますのでこちらもご参照ください。

ブラウザ操作

項目コード
タイトルの取得browser.title
現在のURLを取得browser.current_url
Webサイトの指定browser.get(“https://selenium.dev”)
ブラウザ操作:戻るbrowser.back()
ブラウザ操作:次へbrowser.forward()
ページの更新browser.refresh()
ページの終了browser.quit()

ウィンドウ操作

項目コード
ウィンドウサイズの取得(幅)browser.get_window_size().get(“width”)
ウィンドウサイズの取得(高さ)browser.get_window_size().get(“height”)
ウィンドウサイズの設定browser.set_window_size(1000, 500)
ウィンドウ位置の取得(x座標)browser.get_window_position().get(‘x’)
ウィンドウ位置の取得(y座標)browser.get_window_position().get(‘y’)
ウィンドウの移動browser.set_window_position(0, 0)
ウィンドウの最大化browser.maximize_window()
ウィンドウの最小化browser.minimize_window()
全画面ウィンドウ(F11)browser.fullscreen_window()
スクリーンショットの取得browser.save_screenshot(‘./image.png’)

要素の取得方法

WebDriverでは、8種類の方法で要素を探して取得することができます。

具体的な要素の取得方法はこちらです。

要素取得方法概要
class namebrowser.find_element_by_class_name()class属性に値を含む要素を探す
CSS selectorbrowser.find_element_by_css_selector()CSS selectorが一致する要素を探す
idbrowser.find_element_by_id()id属性が一致する要素を探す
namebrowser.find_element_by_name()name属性が一致する要素を探す
link textbrowser.find_element_by_link_text()a要素のテキストが一致する要素を探す
partial link textbrowser.find_element_by_partial_link_text()a要素のテキストが部分一致する要素を探す
tag namebrowser.find_element_by_tag_name()tag nameが一致する要素を探す
XPathbrowser.find_element_by_xpath()XPathと一致する要素を探す

複数の要素を検索する場合は、「element」の部分を「elements」に変更します。

例えば、複数のCSS selectorを検索したい場合は、「driver.find_elements_by_css_selector(“”)」とします。

このように指定することによって、リスト型で要素を取得することができます。

「By」を使った要素の取得方法

あらかじめ「By」をインポートする必要がありますが、少しちがった記述方法もあります。

from selenium.webdriver.common.by import By

要素 取得方法
class namebrowser.find_element(By.CLASS_NAME, “”)
CSS selectorbrowser.find_element(By.CSS_SELECTOR, “”)
idbrowser.find_element(By.ID, “”)
namebrowser.find_element(By.NAME, “”)
link textbrowser.find_element(By.LINK_TEXT, “”)
partial link textbrowser.find_element(By.PARTIAL_LINK_TEXT, “”)
tag namebrowser.find_element(By.TAG_NAME, “”)
XPathbrowser.find_element(By.XPATH, “”)

要素の操作

項目コード
テキストの入力【要素】.send_keys(“Selenium”)
テキストのクリア【要素】.clear
クリック【要素】.click()

まとめ

プログラムによる要素の取得には「HTML」の知識も必要にはなりますが、「Selenium」をつかったかんたんな例をとおしてWEB操作の自動化をご紹介しました。

今回ご紹介した内容もとにいろいろとお試しください。

ちなみに、PythonをもちいてWEB情報を取得したい場合には「Selenium」をつかった方法のほかに、「BeautifulSoup」をつかったシンプルな方法もあります。もし、「もっと簡単な方法でWEB情報を取得したい」とお考えの場合は、こちらをご一読ください。

タイトルとURLをコピーしました