Python超入門 #003 [Webページの自動入出力(selenium)その1 要素を見つけて操作する]

前回までの超入門は

 前回までのpython超入門は、pythonを利用するようになった経緯、pythonのインストールライブラリのインストール方法について触れました。今回はそのライブラリの一つでWebページの自動入出力を行うseleniumの使い方について触れます。

seleniumとは

 seleniumはブラウザの自動操作ライブラリです。ブラウザを自動操作することはRPA(Robotic Process Automation)ということもあります。ブラウザの自動操作ライブラリを使いプログラムをつくれば、縦割りで作られた社内システムからブラウザを介して自動的にデータを入手して統合でき、仕事が効率化します。もちろん社内に限らず外部のインターネットサイトも操作することができます。

はじめにやること(seleniumのインストール)

 まずはseleniumパッケージをインストールすることです。仮想環境のコマンドラインから以下のようにコマンドを打ちます。

py -m pip install selenium

proxyで制限を受けている場合はここからパッケージを入手します。serch projectにseleniumと入力し検索するとトップに出てきたものをクリックします。その後左手にあるDownload filesをクリックし、末尾がwhlのファイルをダウンロードし、ダウンロード先のディレクトリへ行き、以下のコマンドを打ちます。

python -m pip install --no-deps ファイル名

これでseleniumがインストールされます。

なおHTTP接続のため、urllib3というライブラリもインストールする必要がありそうですので注意してください。

まだやらなくてはいけないことがあります(ドライバの入手)

 seleniumでは、様々なブラウザに対応する上で、各ブラウザ毎につくられた「ブラウザドライバ」を利用します。この超入門はpythonの利用環境としてWindows/IEを前提としますので、IEのブラウザドライバをここからダウンロードします。
 32bitと64bit版とがありますが、バグが少ない32bit版を推奨されることが多いようです。selenium serverは入手する必要はありません。なお、インストールフォルダを環境変数に設定するとコード中でインストールフォルダを書く必要はないようですが、環境変数を管理するほうが大変なので、ここでは環境変数は設定しないこととします。

これではじめてコードが書けます[import]

 まずコードでは、必要なクラスのみインストールします。ここではwebdriverとActionChainsというドライバを入れます。ActionChainsが必要なのは多くがキーをおしながらなどの凝った操作をする場合のようですが、単にボタンをクリックしたい場合でも作りによっては要素をクリックできない場合があり、その場合のコード例としてActionChainsでのクリックを含めています。

from selenium import webdriver
from selenium.webdriver.common.action_cahains import ActionChains

ようやくWebページを開くことができます[driver.geturl()]

次にブラウザを起動して特定のページにアクセスさせます。以下はIEの例です。

url = "https://〜/xxxx.html"
driver = webdirber.Ie("C:¥〜ブラウザドライバーのインストール先¥IEDriverServer.exe")
driver.get(url)

これで対象のWebページが開きます。

つぎに要素を探します[driver.find_element_by〜('〜')]

次に開いたWebページの各要素に対し必要な操作を記述します。以下のコードでははログインするためにid, passwordを入力しログインボタンを押させる操作となっています。

login_form = driver.find_element_by_id('id')
login_form.send_keys("my_id")

time.sleep(1)

pw_form = driver.find_element_by_name('password')
pw_form.send_keys("my_passowrd")

 Webページをコードで操作するには、webdriverオブジェクトで取得したWebページに対し、まずは「driver.find_element_by 〜」でWebページ内の要素を検索しし見つけた要素のオブジェクトを取得します。次に取得した要素オブジェクトのメソッドを使いWebページを操作します

要素オブジェクト.send_keys("入力値")でWebページの要素に値を入力します

 上のコードの最初の5行では、Webページ上で「要素としてidもしくはnameタグで指定されている要素」をdriver.find_element_by〜で検索した結果をlogin_form, pw_formsの各要素オブジェクトとして返し、要素オブジェクトに対し操作可能なメソッド.send_keys("入力値")で、値を自動で入力しています。

上記コードで「要素としてidもししくはnameで指定されている」値は、'id' と 'pwssowrd'となっていますが、どのように指定されているのかは実際のWebページで調べてコードに反映することになります。

調べる方法としては、該当するページをIEで開き、IEの設定で表示される「F12管理者ツール」で表示されるディレクトリを辿り探すことになります。階層が深い場合もありますが、根気強く見つけることが必要です。

なお、ここでsend_keysメソッドが使えているのは、取得した要素がそのメソッドが使えるものであったからです。必ずしもやろうと思うメソッドが準備されているわけではなく、コードで書いた操作ができない場合、「メソッドがない」旨のエラーが表示されます。

Webページの要素をクリックします

time.sleep(1)

login_button = driver.find_element_by_class_name('login-button')
actions = ActionChains(driver)
actions.click(login_button).perform()

思った様に要素が操作できない例が、上のコードのlogin_button要素オブジェクトです。このログインボタンは<a class name= login-button 〜>といった形で指定されているため、login_button = driver.find_element_by_class_name('login-button')で要素オブジェクトlogin_buttonを取得していますが、通常であればlogin_button.click()でクリックされます。

しかし今回操作したWebページの場合、検索した要素はクリックするものとはなっていなかったようで、要素オブジェクトに対しlogin_button.click()ではクリックできません(エラーになります)。そこで、この要素オブジェクトを直接クリックするのではなく、ActionChainによりクリックすることで、ログインボタンをクリックできたという例となります。

次回予告

次回のpython超入門は、seleniumによるブラウザの自動操作をする際のページ遷移時の事例を解説します。お楽しみに。

いかがでしたでしょうか。この記事がお役に立ちましたら「ハートボタン」「フォロー」「サポート」「コメント」での応援よろしくお願いします。



この記事が気に入ったらサポートをしてみませんか?