LoginSignup
7
5

More than 3 years have passed since last update.

初めて作ったバッチのお話

Last updated at Posted at 2019-12-10

はじめに

※この物語はbat初心者の平凡な日常を淡々と描く物です。過度な期待はしないでください。

朝、いつもの様にコーヒーを飲んで作業をします。
作業をしているとお昼の時間になりました。お昼時間になるとお弁当Webサイトでお弁当を購入した人が誰かわかるように、お弁当リストを準備しなくてはいけません。
Webサイトの中に印刷ページがあるので、いつもの様にログインをして印刷ページまで移動して印刷を行います。
これを毎日行います。

毎日作業して半年たった辺りでふと思いました。
「これを毎日するのは面倒臭いな」

そうだ!自動で印刷してくれるようにすればわざわざ印刷する手間もなくなるし、忘れることもない!
じゃあ自動化するようにバッチを作ろう!

以上導入でした。

環境準備

バッチ作成にはSeleniumを使用しました。

Selenium(セレニウム)とは、Webアプリケーションのテスト自動化を実現するブラウザ駆動型テストツール群です。ブラウザ操作からテストスクリプトを作成でき、Webベース管理タスクの自動化も行えます。Webブラウザの自動操作ライブラリとしてさまざまな機能を備えています。

引用元:ossnews.jp/oss_info/Selenium

だそうです。難しいことはわかりませんがブラウザ操作を自動化できるならいいやという気持ちで使ってます。

動作環境はこちら!
OS:Windows Server 2008 R2 Datacenter SP1
Chrome: 78.0.3904.106(Official Build) (64 ビット)
Python:3.7.2
Chrome用Webdriver:78.0.390470

環境準備はこちら!
Seleniumを使うためにはPythonやブラウザに対応したWebdriverが必要なため、Chrome用Webdriverをインストールしています。
※WebDriverは自分のChromeブラウザと同じバージョンか調べて使う必要があります。

Pythonをインストール(DL元:https://www.python.org/
WebDriverをインストール(DL元:https://chromedriver.chromium.org/home
Seleniumインストール(下記コマンドのみ

python -m pip install selenium

pywinautoをインストール(DL元:https://github.com/pywinauto/pywinauto

pywinautoはMicrosoft Windows GUIを自動化する一連のPythonモジュールで、キーボードとマウスのアクションを実行することができます。

pywinautoインストールについては少し複雑で、下記のサイトを参考にインストールしました。

参考:Windows10でpywinautoを使おうとしたらハマった
https://qiita.com/ponkio-o/items/409766b574f03d1d5a49

作成手順

これで環境はOK
次にVisual Studio Codeを使ってソースコードを書いていきます。
はじめに使用するモジュールを記述します。

import time, pywinauto'パイナイトでTimeモジュールを使用する'
from selenium import webdriver'Webdriverモジュールをインポートする'

ここからWebページの画面を見ながらどのような作業を行わせたいか考え、記述していきます。
まずはログインページに移動します。

driver = webdriver.Chrome("./chromedriver.exe") 'さっきDLしたchromedriver.exeを使う'
driver.get("https://www.obentonet.jp/login.html") 'chrome起動してお弁当Webページに移動'

ログインページにきましたが認証が必要です。
本来ならば絶対やってはいけないのですが、他の方法を考えるのが面倒だったので、認証情報を埋め込んで、ログインをしています。

codeBox = driver.find_element_by_id("CORPORATION_CD") '検索入力ボックスのhtmlを探す'
codeBox.send_keys("会社ID") 'その検索ボックスで 「会社ID」と打つ'

idBox = driver.find_element_by_name("LOGINID") '検索入力ボックスのhtmlを探す'
idBox.send_keys("ユーザー名") 'その検索ボックスで 「ユーザー名」と打つ'

passBox = driver.find_element_by_name("PASSWORD") '検索入力ボックスのhtmlを探す'
passBox.send_keys("パスワード") 'その検索ボックスで 「パスワード」と打つ'

認証情報を打ち込んだら、ログインボタンをクリックするようにコードを書きます。

login = driver.find_element_by_css_selector(".buttonarea > input")'loginにログインボタンのリンクを関連付ける'
login.click()'ログインボタンのリンクをクリック'

ログインできたら、印刷用のページに行くために、お弁当Webページ画面を見ながら、どう遷移したらいいかコードを記載していきます。

login = driver.find_element_by_link_text("社内注文リスト")'loginに社内注文リストのリンクを関連付ける'
login.click()'社内注文リストのリンクをクリック'
login = driver.find_element_by_link_text("印刷用")'loginに印刷用のリンクを関連付ける'
login.click()'印刷用のリンクをクリック'

印刷ページに到着したら、次に印刷をするために【右クリック】-【印刷】をコードで記載します。

time.sleep(5)'即行動すると反応しないので一時停止'
pywinauto.keyboard.SendKeys("+^P")'右クリック'
time.sleep(5)'一時停止'
pywinauto.keyboard.send_keys("%P")'印刷実行'
time.sleep(5)'一時停止'
driver.quit()'閉じる'

これでバッチは完成です。
動かしてみた動画がこちら↓

後はタイムスケジュールを設定して、朝指定した時間に起動させれば、当人は印刷されたものを取り出すだけでOKになりました!

まとめ

いかがでしたでしょうか。
中身はごく簡単な記述で、行っていることもたいしたことはないですが、一連の作業を完全に自動化させることができます。
今回初めてバッチを作成してみて、コードの記述の仕方や、インストールでつまずいたポイント等もあったので勉強にもなりました。

もし普段同じ作業を繰り返しているものがあれば、試しに作成してみてはいかがでしょうか。

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5