今回はどちらかというとpythonの使い方メインとなりますが大量にあるリストを
seleniumを使い一定のルールに基づき入力していくサンプルコードを作成していきます!
構築がまだの方は構築手順を載せていますので参照してください!
今回の目的は?
4月になり新入社員が入社する季節となりました。
受け入れとしては新しく入った社員の情報をシステムに登録することが業務として挙げられます。
情報はデータであるのに手で入力していては時間と労力が無駄になります。。。
そこでseleniumをRPAっぽく使用する方法を伝授したいと考えました!
入力するフォームはこちらです
外部のフォームを使用すると怒られそうだったので自作しました!内部の機能はなく登録するを押してもフォームに入力した文字列が消えるくらいです。
早速作ってみよう
アバウトな設計をしてみました
大体こんなかんじで作成してみます!
①指定した外部のファイルから1行読み込む
↓
②タブ区切りで「社員番号」「名前」「メールアドレス」を変数に入れる
(社員の情報はエクセル、スプレッドシートを想定)
↓
③seleniumを使用して入力および確定を行う
↓
④selemiumを終了する
↓
⑤参照する行を+1行して①に戻る(参照するものがなくなったら実行終了)
pythonで外部ファイルを読み込む方法を考えます
外部ファイルを読み込む場合「open」コマンドを使用します。例えば
f = open('社員リスト.txt', 'r' , encoding='UTF-8')
さらに1行ずつ変数に入れてくれる機能もあるとのことで使用してみます
#1行ずつ変数(list)に入れていく
data_list = f.readlines()
無限ループを抜ける条件を考えます
これも機能を使えば簡単にできるとのことでした
#読み込んだリストから1行ずつ使用しデータがなくなるまで繰り返す
for data in data_list:
コードの公開
それでは実際に実装したコードをお見せします。
xpathなどは簡単に取得できるようにしましたので特に説明しません。
もし必要であれば過去の記事をご参照ください!
pythonでは
#いつもの宣言
from selenium import webdriver
from selenium.webdriver.chrome import service
from selenium.webdriver.common.by import By
from time import sleep
import os
#selenium起動前準備
chromedriver = "C:\autotest\chromedriver.exe"
chrome_service = service.Service(executable_path=chromedriver)
driver = webdriver.Chrome(service=chrome_service)
#外部ファイルを開く(日本語入力している場合はエンコードも宣言する)
f = open('社員リスト.txt', 'r' , encoding='UTF-8')
#1行ずつ変数(list)に入れていく
data_list = f.readlines()
#読み込んだリストから1行ずつ使用しデータがなくなるまで繰り返す
for data in data_list:
#リストの最後に改行が含まれているので削除する
data = data.rstrip('\n')
#タブ区切りで変数に入れる
personal_data = data.split('\t')
####デバッグ用(テキストから読み込んだリストがどのように入っているか確認したい場合はコメントを外す)####
#print('社員ID:' + personal_data[0])
#print('名前:' + personal_data[1])
#print('メール:' + personal_data[2])
####ここまでデバッグ#####
#selenium起動する(登録時にリフレッシュするように入力毎にページ起動している)
driver.get('https://okutan-lab.net/%e3%83%aa%e3%82%b9%e3%83%88%e3%81%8b%e3%82%89%e8%87%aa%e5%8b%95%e5%85%a5%e5%8a%9b%e3%82%92%e7%b9%b0%e3%82%8a%e8%bf%94%e3%81%99%e3%82%b5%e3%83%b3%e3%83%97%e3%83%ab%e3%82%b3%e3%83%bc%e3%83%89/')
#selenium動作
driver.find_element(By.XPATH,'//*[@id="idlabel"]').send_keys(personal_data[0])
driver.find_element(By.XPATH,'//*[@id="namelabel"]').send_keys(personal_data[1])
driver.find_element(By.XPATH,'//*[@id="maillabel"]').send_keys(personal_data[2])
#サンプルコードを確認しやすくするためにスリープを入れています。実用的には無意味なので外しても構いません。
sleep(3)
driver.find_element(By.XPATH,'//*[@value="登録する"]').click()
#ファイルを閉じる
f.close()
リストはこんな感じ
スプレッドシートをコピーしたような形にしました。
00001 サンプル 太郎 test1@okutan-lab.net
00002 サンプル 次郎 test2@okutan-lab.net
00003 サンプル 三郎 test3@okutan-lab.net
00004 サンプル 四郎 test4@okutan-lab.net
00005 サンプル 五郎 test5@okutan-lab.net
00006 サンプル 六郎 test6@okutan-lab.net
最後に
今回は自動化のテクニックより自動化を使用した活用方法をご紹介しました。
ほかにも様々な活用方法がありますのでいずれご紹介できればと思います!
ほかにも自動化についてご紹介していますので是非タブから自動化を覗いていただければと思います!
コメント