となりの日本家屋がスマートホームなわけがない

築70年の日本家屋を文化的に過ごすため、今流行りのスマートホーム化を施工した記憶領域。

自宅でできるRPA(ポイントメール編)

自宅でできるRPAシリーズ。

今回は実際にRPAスクリプトを作ります。

  

今回はお題として、ポイントサイトから送付される「ポイントメール」の自動表示に挑戦します。

 

 

[目次]

  

用意するもの

  1. Windowsパソコン
  2. ポイントメールに登録済みのGMAILアカウント

 

基本設計

今回のお題であるポイントメールの表示までの、RPAの動作を設計します。

  1. Google Chromeを起動(シークレットモードとする)
  2. Gmailを表示
  3. 未読のポイントメールを表示
  4. 先頭のメールを開く
  5. ポイントリンクをクリックしてブラウザで表示する
  6. ブラウザで表示された内容を熟読する

 

作ってみよう

SikuliXのソフト自体やPythonの使い方は、詳しく解説された別のサイトを参照されることをおすすめします。ここでは、基本設計に従ってスクリプトを作成していきます。

 

まずは前回までに作成したSikuliXのアイコンをダブルクリックして起動します。

尚、アイコン名を分かりやすいように「SikuliX」に変更しました。

f:id:a03:20200504160906j:plain

図1.SikuliX起動アイコン

1.Google Chromeの起動

標準設定でChromeをインストールすると、下記の場所にChromeの実行ファイルが格納されています。

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"

シークレットモードで起動するには、下記のオプションを指定します。

--incognito

 以上をShellで渡せばChromeがシークレットモードで起動します。

f:id:a03:20200504160911j:plain

図2.Chromeの起動

図2の状態に入力して実行し、Chromeがシークレットモードで起動することを確認します。

 

2.Gmailの起動

GmailのURLは「https://www.gmail.com/」なので、これを渡します。

ここからは定数を使用する使用など、自分好みにちょっと変えてみました。

f:id:a03:20200504164927j:plain

図3.Gmail起動スクリプト

どうやらうまくGmailが開くようです。

f:id:a03:20200504164931j:plain

図4.Gmailログイン画面

次に、Gmailにログインします。まずメールアドレスの入力欄にメールアドレスを自動入力し、ENTERを押します。次に表示されるパスワードの入力欄も同じように自動入力します。

うまくいくとGmailの画面が表示されます。

f:id:a03:20200504210626j:plain

図5.Gmailの画面

ここで、IMEが日本語入力モードがONになっていると、メールアドレスの入力が「全角」で行われてしまうことがあります。これについては、現在のIMEの入力モードを判定し、日本語入力モードになっていれば動作を中断させるように対策しましょう。

本当は、「半角/全角」ボタンを自動で押せればよいのですが、実行前に半角入力モードに切り替えた方が作るのが簡単なので逃げています。

f:id:a03:20200505130054j:plain

図6.IME判定

 

3.未読のポイントメールを表示

続いて未読のポイントメールのみを表示させます。

Gmailの未読メールを表示するには、検索欄に「is:unread」を入力して検索します。

これに楽天さんからのポイントメールを指定するキーワードとして「クリックしてポイントGET」を組み合わせて検索します。 

f:id:a03:20200505134227j:plain

図7.キーワード入力

図7の定数: GMAIL_UNREADとGMAIL_POINT_KEYWORD_1には、それぞれのキーワードを入れてあります。

 

4.先頭のメールを開く

キーワード検索をして、結果が完全に表示されるまで待ちます。その後、一番先頭にあるキーワードの「クリックしてポイントGET」をクリックします。

尚、タイムアウト時間として30秒を指定し、それを過ぎても表示されない場合は、エラーとして動作を中断します。

f:id:a03:20200505134831j:plain

図8.先頭のメールをクリック

 

5.ポイントリンクをクリックしてブラウザで表示する

ポイントメールをそのまま開いても、クリックするリンクは表示されていません。なぜなら、クリックする場所は画像リンクになっているからです。

そのため、まずメール内の画像を表示させます。

f:id:a03:20200505143415j:plain

図9.メール内の画像表示

 

そして、メールのどこかにあるポイントの画像リンクを探してクリックします。

これには「PAGE DOWN」ボタンを押して画面を下にスクロールし、目的の画像リンクを探すことにします。念のため「PAGE DOWN」ボタンを押す回数を5回とし、それでも見つからなければエラーで中断させます。

f:id:a03:20200505145103j:plain

図10.画像リンクのクリック

 

6.ブラウザで表示された内容を熟読する

以上でポイントサイトの情報が表示されるのですが、楽天会員のユーザIDとパスワードでログインする必要があります。それも同じように自動入力させます。

f:id:a03:20200505152602j:plain

図11.楽天ログイン

 

作成したスクリプト

今回作成したスクリプトを参考に貼り付けておきます。やっていることは簡単なので、あまり参考にはならないかもしれません。

「1588581677210.png」などの画像ファイルは画面に表示される画像を切り取ったものですので、利用される環境に合わせて画面をキャプチャして貼り付けて下さい。

import subprocess

#定数
EXE_PATH = "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe "
CHROME_OPTION = " --incognito " #シークレットモード

GMAIL_URL = "https://www.gmail.com/"
GMAIL_ADDRESS = ""
GMAIL_PASOWORD = ""
RAKUTEN_ID = ""
RAKUTEN_PASSWORD = ""

GMAIL_UNREAD = "is:unread "
GMAIL_POINT_KEYWORD_1 = u"クリックしてポイントGET"



#Chrome実行
subprocess.call(EXE_PATH + CHROME_OPTION + GMAIL_URL)

#表示完了を待つ
if not(exists("1588581677210.png", 10)):
popup("Gmail open fail 1")
exit()

#メールアドレス入力
sleep(2)
if exists("1588583161985.png"):
click("1588583161985.png")

#IME判定
if exists("1588645508460.png"):
popup(u"IMEが日本語モードになっているため中断します")
exit()

type(GMAIL_ADDRESS)
type(Key.ENTER)

#表示完了を待つ
if not(exists("1588582657641.png", 10)):
popup("Gmail open fail 2")
exit()

#パスワード入力
sleep(2)
click("1588594923737.png")
type(GMAIL_PASOWORD)
type(Key.ENTER)

#表示完了を待つ
if not(exists("1588583006053.png", 30)):
popup("Gmail open fail 3")
exit()

#キーワード入力
click("1588594490046.png")
paste(GMAIL_UNREAD + GMAIL_POINT_KEYWORD_1)
type(Key.ENTER)

#タイトルクリック
if not(exists("1588648922336.png", 30)):
popup("Gmail open fail 4")
exit()

click("1588648922336.png")

#画像表示
if not(exists("1588596582020.png", 30)):
popup("Gmail open fail 5")
exit()

click("1588596601899.png")

sleep(2)
#ポイントボタンが見つかるまで画面スクロール
click("1588647790684.png")

for i in range(5):
if exists("1588643156505.png", 1):
click("1588643156505.png")
break

#スクロール
type(Key.PAGE_DOWN)

if i == 4:
popup(u"ポイントボタンが見つかりませんでした")
exit()
break

#楽天ログイン
if not(exists("1588648482816.png", 30)):
popup("Rakuten open fail 1")
exit()

#ID入力
if exists("1588648653237.png"):
click("1588648653237.png")

type(RAKUTEN_ID)
type(Key.TAB)

#パスワード入力
if exists("1588648708997.png"):
click("1588648708997.png")

type(RAKUTEN_PASSWORD)
type(Key.ENTER)

popup(u"表示完了")

 

動かしてみよう

準備ができたら実行ボタンを押して動作を確認しましょう。

ポイントメールのクリックのあと、楽天にログインして広告内容が表示されれば完成です。

 これに加え、Gmailのログイン時に二段階認証をしているときの処理や、複数のポイントメールの表示など、細かいことに対応していけばもっと便利になると思います。

 

まとめ 

以上でSikuliXを使用した自宅でできるRPAの説明は終了です。

RPAとPythonの勉強が同時にできてお得ですね。