ブラウザの自動操作
Windows環境を想定している。Macだともうちょっと簡単。
ブラウザの自動操作でこんなことができる!
- Webから自動で最新の情報を取得できる
- LMSに自動でアクセスして、課題の情報を取得できる
- 他にあれば教えて下さい
Anacondaのインストール
WindowsでPythonを使うために、Anacondaというツールで環境を構築する。
https://www.javadrive.jp/python/install/index5.html
Seleniumのインストール
Anaconda Promptを開き、以下のように入力する。
pip install selenium
これでPythonでSeleniumが使えるようになった。
Chrome用のwebdriverをダウンロード
以下を参照。
https://rdk.me/anaconda/#toc7
自動操作のプログラム作成
以下のPythonプログラムに学籍番号とパスワードを記入すると、自動的にLMSにログインする。
from selenium import webdriver
import time
my_username = "" # 自分の学籍番号
my_password = "" # 自分のパスワード
driver = webdriver.Chrome("c:/chromedriver.exe") # 自分がwebdriverを置いたパスを指定
driver.get("https://lms.gifu-nct.ac.jp/login/index.php")
time.sleep(2)
idss = driver.find_element_by_id("username")
idss.send_keys(my_username)
pw = driver.find_element_by_id("password")
pw.send_keys(my_password)
time.sleep(0.5)
login = driver.find_element_by_id("loginbtn")
login.click()
プログラムについて解説する。
URLへのアクセス
driver.get("https://lms.gifu-nct.ac.jp/login/index.php")
フォームへの記入
特定のフォームやボタンを操作したい場合、まずその要素をプログラムで特定する必要がある。
これはHTMLといって、Webページを記述する言語。
このHTMLから、フォームの要素にどのような名前がついているかを確認する。
このボタンは以下のようなHTMLで作られている。
<input type="text" name="username" id="username" class="form-control" value="" placeholder="ユーザ名" autocomplete="username">
いろいろな名前がついている。
<input type="">
: 要素の種類を示している。入力フォームなのでinput。type
は入力する値の種類
name=""
: 要素の名前
id=""
: 要素をただ1つに特定するID。これが重要
class=""
要素の属するカテゴリ(クラス)。複数指定できる
他は入力フォーム独自の事項
この3つはどれも名前(のようなもの)を示しているが、特に使うのはid
。
id
はそのHTMLの中で同じものがないため、どの要素かを特定することができる。
name
やclass
は同じものが複数使われている可能性がある。そうなれば使えない。
今回はid="username"
という記述があるため、これを使う。
idss = driver.find_element_by_id("username")
これで要素を特定できたため、この要素に値を入れる。
idss.send_keys(my_username)
この下も同様の操作をしている。
サイトによっては、id
で要素が特定できなかったり、id
がランダムに変わる場合がある。
そういった場合、「この要素の中の何番目のinput
」のような指定もできる。
こういった場合、HTMLの要素の親子関係をたどるXPath
が便利である。
https://kurozumi.github.io/selenium-python/locating-elements.html#locating-by-xpath
さきほどの「検証」からフォームの要素を示すプログラムを右クリックして、
「Copy」→「Copy full XPath」を選択する。
以下のような文字列がコピーされる。
/html/body/div[2]/div[2]/div/div/section/div/div[2]/div/div/div/div/div/div[1]/form/div[1]/input
これを使って要素を特定することができる。
idss_xpath = "/html/body/div[2]/div[2]/div/div/section/div/div[2]/div/div/div/div/div/div[1]/form/div[1]/input"
idss = driver.find_element_by_xpath(idss_xpath)