1.概要

フリーの RPA Sikulix を用いて、法人向けソフトバンク請求データをダウンロードする。
法人向けソフトバンクのサイトは以下のサイト


https://portal.business.mb.softbank.jp/portal/BPS0001/

ここにユーザーIDとパスワードを入力してログインすれば、
法人向けコンシェルサイトにつながる。
その中から、先月の請求データを特定のフォルダにダウンロードする。
請求データには社員に貸与している携帯電話の各種料金の一覧が全て載っている。
請求データは毎月同じファイル名になってしまうので、
ダウンロードした日付をファイル名に付与して同じフォルダに蓄積できるようにする。

2.Chromeで指定したURLを開く

doubleClick("ここにGoogleChromeのショートカット画像")
wait(5)
paste("https://portal.business.mb.softbank.jp/portal/BPS0001/")
type(Key.ENTER)
wait(5)

実行するとこんな感じ。

3.ユーザーIDとパスワードを自動入力する

ユーザーIDとパスワードを入力してログインする。
ユーザーIDを入力:ABCDEFGabcD (このIDは適当です)
パスワードを入力:abC2DEf3(このパスワードは適当です)
ログインボタンを押すという流れだ。

ID/PASSを入力  ※テストなので存在しないID/PASSです

click("ここに管理者IDの画像")
type('ABCDEFGabcD')
type(Key.TAB)
type('abC2DEf3')
#ログインボタンを押下
click("ここにログインボタンの画像")
wait(5)

3.ループした時の強制終了の方法

WindowsOS:Alt + Shift + C
これでも止まらない場合はタスクマネージャーでJAVAを終了させる

4.「ご利用料金分析サービス」をクリックする。

ここでは画像が見つからなかった時も考え、エラーにならずダイアログが表示されユーザーが再実行するか、スキップして実行するか中止するかを決める。
ブラウザが大きく開いていないことが原因で画像が隠れていることがあったためだ。

setFindFailedResponse(PROMPT)
find("ここに「ご利用料金分析サービス」の画像")
click("ここに「ご利用料金分析サービス」の画像")
wait(5)

ただ単に画像が見つからない場合にエラーを返すには以下のように記述する。

if exists('ここに該当する画像'):
click(getLastMatch())
else:
popup(u'画像が見つかりませんでした。')

エラーとポップアップ画面を表示させるには以下のように記述する。

#ログインに失敗を確認
if exists("ここに該当する画像"):
print('ログインに失敗しました')
popup(u'ログインに失敗しました')
#ポップアップとして表示
print('処理終了')
popup(u'処理終了')

5.「請求詳細」をクリックし、
「料金項目別請求額」の中にある「次へ」をクリックする。

「請求詳細」は今までと同じだが、「料金項目別請求額」は「次へ」のボタンがセンターにないので、
オフセットで、ずらす必要がある。

#請求詳細をクリック
setFindFailedResponse(PROMPT)
find("ここに請求詳細の画像")
click("ここに請求詳細の画像")
wait(5)

#料金項目別請求額
setFindFailedResponse(PROMPT)
find("ここに「料金項目別請求額」の画像")
click(Pattern("ここに「料金項目別請求額」の画像").targetOffset(208,45))
wait(10)

オフセットのやり方は画像をクリックして「ターゲットオフセット」タブで、
クリックしたいところをマウスでクリックするだけ。

6.「スクロール」してダウンロードボタンを押す

画像が見つかるまでスクロールする方法として、
画像が見つかるまで↓キーを押す操作になる。WEB画面上での操作に使えます。

「ダウンロード」のボタンが見えない。

ダウンロードボタンが見えるまでスクロールする。

while not exists("ここに「ダウンロード」の画像",0.1):
type(Key.DOWN)

7.ファイル名に今日の日付時間を付与してダウンロードする。

このサイトではファイル名が一律「billing_priceitem.csv」になってしまう。
そのため、毎月ダウンロードすると次々と上書きされてしまい、過去データが消えてしまう。

ファイル名に今日の日付時間を付与するには

あらかじめファイル名を指定して実行ができるように、
Chromeの設定で事前に準備する。

「設定」の「詳細設定」の「ダウンロード」
「ダウンロードする前に各ファイルの保存先を確認する」をオンにします。
この状態でファイルをダウンロードをしたいサイトへ移動し、
ダウンロードリンクをクリックすると
「名前を付けて保存」ウィンドウが表示される。

ダウンロードを開くとファイル名を指定して保存のダイアログが表示されるので、
C:\test\billing_price20210108163112.csv
のように自動入力し「保存」をクリックする動作を自動化する。
これによりデータが同じフォルダに自動で蓄積されていく。

import datetime
filename = "C:\test\billing_price" + datetime.datetime.today().strftime("%Y%m%d%H%M%S") + ".csv"
type(filename)
wait(5)
click("ここに「保存」の画像")

このようにデータが蓄積されていく。

import datetime
filename = "C:\test\billing_price" + datetime.datetime.today().strftime("%Y%m%d%H%M%S") + ".csv"
type(filename)

ここまでのソース
特定のフォルダに日時を付加したデータが保存される
今後の課題として、エクセルに保存されたIDパスワードを読み取って、
法人用ソフトバンクのサイトにつなぎ、データをダウンロードできるようにする。

以下がすべてのソースになるIDとパスワードを正しく設定し、
画像の部分は実際の画像と差し替えればそのまま使用可能

import datetime
filename = "C:\test\billing_price" + datetime.datetime.today().strftime("%Y%m%d%H%M%S") + ".csv"

doubleClick("1610069354315.png")
wait(5)
paste("https://portal.business.mb.softbank.jp/portal/BPS0001/")
type(Key.ENTER)
wait(5)

#管理者ID、パスワードを入力
click("1610070990149.png")
type('ABCDEFGabcD')
type(Key.TAB)
type('abC2DEf3')
#ログインボタンを押下
click("1610071024426.png")
wait(5)
#ご利用料金分析サービスをクリック
setFindFailedResponse(PROMPT)
find("1610072706772.png")
click("1610072706772.png")
wait(5)
#請求詳細をクリック
setFindFailedResponse(PROMPT)
find("1610080456762.png")
click("1610080456762.png")
wait(5)
#請求項目別請求額
setFindFailedResponse(PROMPT)
find("1610083792112.png")
click(Pattern("1610083792112.png").targetOffset(208,45))
wait(10)
#ダウンロード画像が見つかるまでスクロール
while not exists("1610081720587.png",0.1):
type(Key.DOWN)
wait(5)
click("1610081720587.png")
wait(10)
type(filename)
wait(5)
click("1610092147053.png")

おすすめの記事