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 name | browser.find_element_by_class_name() | class属性に値を含む要素を探す |
| CSS selector | browser.find_element_by_css_selector() | CSS selectorが一致する要素を探す |
| id | browser.find_element_by_id() | id属性が一致する要素を探す |
| name | browser.find_element_by_name() | name属性が一致する要素を探す |
| link text | browser.find_element_by_link_text() | a要素のテキストが一致する要素を探す |
| partial link text | browser.find_element_by_partial_link_text() | a要素のテキストが部分一致する要素を探す |
| tag name | browser.find_element_by_tag_name() | tag nameが一致する要素を探す |
| XPath | browser.find_element_by_xpath() | XPathと一致する要素を探す |
「By」を使った要素の取得方法
あらかじめ「By」をインポートする必要がありますが、少しちがった記述方法もあります。
from selenium.webdriver.common.by import By| 要素 | 取得方法 |
| class name | browser.find_element(By.CLASS_NAME, “”) |
| CSS selector | browser.find_element(By.CSS_SELECTOR, “”) |
| id | browser.find_element(By.ID, “”) |
| name | browser.find_element(By.NAME, “”) |
| link text | browser.find_element(By.LINK_TEXT, “”) |
| partial link text | browser.find_element(By.PARTIAL_LINK_TEXT, “”) |
| tag name | browser.find_element(By.TAG_NAME, “”) |
| XPath | browser.find_element(By.XPATH, “”) |
要素の操作
| 項目 | コード |
| テキストの入力 | 【要素】.send_keys(“Selenium”) |
| テキストのクリア | 【要素】.clear |
| クリック | 【要素】.click() |
まとめ
プログラムによる要素の取得には「HTML」の知識も必要にはなりますが、「Selenium」をつかったかんたんな例をとおしてWEB操作の自動化をご紹介しました。
今回ご紹介した内容もとにいろいろとお試しください。
ちなみに、PythonをもちいてWEB情報を取得したい場合には「Selenium」をつかった方法のほかに、「BeautifulSoup」をつかったシンプルな方法もあります。もし、「もっと簡単な方法でWEB情報を取得したい」とお考えの場合は、こちらをご一読ください。