PythonのseleniumでWEBアプリを自動で操作する方法(基本)
- WEBブラウザでの操作を自動化したい!
- 普段のWEBでの手順を自動化する効率的なツールをつくりたい!
そんな方向けに、今回はPythonのSeleniumを使用したWEB操作の自動化について解説しようと思います。
この記事を読むことで次のことができるようになります。
- PythonのSeleniumを使用してWEBを自動で操作できる。
- WEBを自動化する方法が理解できる。
私も普段の仕事で、あるドキュメントの情報をWEBから自動でかき集め、
ドキュメントを自動で修正してくれるツールを作成しました。
今まで週1回1時間くらいかけていたドキュメントの作成が、
ツールを動かすだけの10分程度でつくれるようになりました。
この威力をみなさんにも是非味わっていただきたいです。
目次
基本的なWEBの自動操作方法
PythonのSeleniumを使用してWEBを自動化するために以下の手順が必要です。
- ChromeDriverインストール
- seleniumインストール
- WEB操作プログラムの作成
それぞれ解説していきます。
環境
以下の環境で実行確認を行っています。
WEBブラウザは安定性があるGoogleChromeを使用しています。
- Windows10
- GoogleChrome 81.0.4044.138
- ChromeDriver 81.0.4044.138
- Python3.7
- selenium 3.141.0
ChromeDriverインストール
Seleniumを使用するために、ブラウザ(GoogleChromeなど)とSeleniumとの間にWebDriverが必要になります。
下のURLにアクセスし、自分のGoogleChromeのバージョンに合ったChromeDriverをインストールする必要があります。
http://chromedriver.chromium.org/downloads
私の場合、GoogleChrome 81.0.4044.138でしたので、
ChromeDriver 81.0.4044.138をインストールしました。
選択するOSはwin32を使用します。
インストールしたファイルは、任意の場所に移動し、解凍してください。
とりあえず「C:\driver」の直下に展開しました。
seleniumインストール
seleniumのプログラムを動かすために、
Pythonライブラリのseleniumが必要なので、インストールします。
私はPyCharmを使用しているので「設定」→「プロジェクトインタープリター」の箇所からライブラリをインストールします。
コマンドプロンプトなど(こちらのインストールが主流だと思います)では
以下のコマンドでライブラリをインストールできます。
pip install selenium
プログラムの作成
ではプログラム作成の準備が整ったので、実際にプログラムを作成していきましょう!
プログラム作成は2つに分けて説明します。
- WEBブラウザの起動(終了)
- 画面項目の操作(要素取得、編集、操作)
WEBブラウザの起動(終了)
まずは、ブラウザの起動/ブラウザの終了の方法です。
import time from selenium import webdriver driver = webdriver.Chrome('C:\\driver\\chromedriver') # chromedriverの場所を指定してください driver.get('http://www.google.com/') # google.comをgooglechrome開きます time.sleep(5) # 5秒間待ちます driver.quit() # googlechromeを閉じます
5行ほどの簡単なコードで実現できます。
googleのページをGoogleChromeで開き、5秒待機したあとに、GoogleChromeを閉じています。
注意点は、chromedriverを指定している箇所で、
さきほど「chromedriver.exe」を置いた場所に書き換えて実行してください。
このプログラムを実行してもらうとわかりますが、
「Chromeは自動テストソフトウェアによって制御されています」というメッセージがかかれたChromeブラウザが勝手に立ち上がり、
5秒後にブラウザが消えていきます。
画面項目の操作
次に、実際に画面内の項目に文書を入力したり、ボタンを押すなどの画面操作を行う方法を紹介します。
まずは画面項目を操作している実際のコードを見てください。
import time from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome('C:\\driver\\chromedriver') # chromedriverの場所を指定してください driver.get('http://www.google.com/') # google.comをgooglechrome開きます time.sleep(5) # 5秒間待ちます # 要素の取得(今回は検索ボックスを取得) searchbar = driver.find_element(By.XPATH, '/html/body/div/div[3]/form/div[2]/div[1]/div[1]/div/div[2]/input') # 要素へ入力(取得した要素に「Python」を入力) searchbar.send_keys('Python') # 要素の操作(取得した要素のsubmit操作) searchbar.submit() time.sleep(5) driver.quit() # googlechromeを閉じます
Googleの検索ページを開き、「Python」の文字を検索ボックスに入力し、検索を行うコーディングです。
要素取得のために必要なライブラリを以下の部分でインポートしています。
from selenium import webdriver from selenium.webdriver.common.by import By
コード内でも紹介していますが、画面操作を行うために3STEPが必要です。
STEP1 要素の取得
まずは操作する対象の要素(今回であれば検索ボックス)を取得します。
要素の取得方法はたくさんありますが、今回は3種類に絞って紹介します。
IDを使用して取得する
HTML上で、IDを指定されている場合、IDを使用して要素を取得するのが一番確実な方法になります。
以下のようなコードで要素を取得することが出来ます。
searchbox = driver.find_element_by_id('idhogehoge')
基本的にIDは要素固有の値(HTML内で1つ)を持つので、IDを指定することで必ず一つの要素を得ることが出来ます。
Class名を使用して取得する
class名を使用して取得する場合、以下のようなコードで取得します。
searchbox = driver.find_element_by_class_name('classhogehoge')
class名はIDと異なり、HTML内で複数要素が存在する可能性があります。
複数要素がある場合、どの要素に対して操作しているのかが曖昧になってしまいます。
逆に、複数の要素全部に対して同じ操作を行いたい場合などは積極的に使用すべきだと思います。
XPATHを使用して取得する
とりあえず迷ったらこれを使うべき!なのがこの方法です。今回のコーディングもこれを使用しています。
以下のようなコードで取得します。
searchbar = driver.find_element(By.XPATH, '/html/body/div/div[3]/form/div[2]/div[1]/div[1]/div/div[2]/input')
XPATHを使用することで、HTML内のこの要素!という指定が出来ます。
そのため、どの要素に対する操作かが明確になります。
要素に対してIDが存在しない、Classが存在しないなどの時にも、XPATHは必ず存在します。
ただし、WEBアプリの画面構造が変わってしまうなど、変化には弱いです。
WEBアプリが更新されてしまった場合、全てのXPATHを調べ直す必要があります。
※補足(ID/ClassName/XPATHの調べ方)
ID/ClassName/XPATHはどうやったらわかるの?と疑問に思った方が多いと思います。
調べ方を簡単に解説しておきます。
GoogleChromeの機能を使うことで簡単に調べることが出来ます。
(最近のブラウザは本当に便利です)
下の画像のように、調べたい項目を「右クリック」→「検証」でその項目の情報を見ることが出来ます。
IDは指定されていませんが、classは指定されていることがわかります。
(IDが指定されている場合、「id=”idhogehoge”」のように指定されています)
さらにXPATHを確認したい場合、項目のHTML(今回であればinputの部分)を右クリック→「Copy」→「Copy full XPath」でコピーすることができます。
※コピーできたら、コードのXPATHに貼り付けてください。
STEP2 要素の編集(入力、選択、クリア)
要素を取得したら、次にその要素に対して文字を入力したり、目的の情報を選択したりします。
要素への入力
以下のように、要素へ文字を入力します。
検索ボックスに対して「Python」という文字列を入力しています。
searchbar.send_keys('Python')
要素の選択
コンボボックスなどの項目の場合、候補から選択するという動作が必要になります。
以下のようなコードを使用します。
selectbox.select_by_index(index) # インデックスを使用した指定方法です selectbox.select_by_visible_text("text") # 直接文字を設定する指定方法です selectbox.select_by_value(value) # valueを設定する指定方法です
細かい説明は省きますが、候補から選択する際に、
①インデックスを指定する。
②直接文字を指定する。
③valueを設定する。
方法があります。試しながら使用してください。
STEP3 要素を操作する
Googleで検索を実行するなどの際はsubmitを行います。
次のコードで実行できます。
searchbar.submit()
また、よくある、ボタンを押す操作は次のようなコードで実行出来ます。
searchbtn = driver.find_element(By.XPATH, '/html/xpath') searchbtn.click()
以上がseleniumを使用する際の基本的なコーディングとなります。
ツールを作り込んでいくともっと応用的なことがしたくなると思います。
そこは別の記事で解説したいと思います。
また、seleniumと同時に使用すると効果の高いBeautifu Soupは下の記事で紹介しています。
興味のある方はごらんください。
以上。