VBSでRPAみたいなものを作ってみた
こんにちは。アイシーティーリンク 櫻井と申します。
現在、お世話になっている勤務先で利用しているグループウェアは
Google Workspaceです。
もちろん、標準ブラウザはGoogle Chromeです。
なので、Google Chrome上でアイシーティーリンクのグループウェアであるMicrosoft365もログインしています。
先日、そのお世話になっている勤務先と取引のある会社から、「うちのTeamsにもゲストログインしてください~」と依頼がありました。
いやいや待ってと。
もうGoogle Chromeで自社のMicrosoft365ログインしてんねん。
いちいちアカウント切替もめんどくさいし、どうすっかな…と。
その取引先から提示された方法は
「Chromeをシークレットウィンドウで立ち上げて毎朝ログインしてねw」
うぅーわ、めんどくさっ!!!
ログインするまでの工程は結構なクリック処理してるじゃないか…。
そんでメールアドレス入力して二段階認証もしてってコレ毎朝やるてか?!
…かったるい…っ!あーめんどくさいっ!!ただただひたすら…
…ということで、できるところまで自動化してしまいましょう。
あー、ちなみに、Microsoft Edge使えばいいじゃんは無しで。
以下のサイトを参考にさせてもらいました。
https://nehori.com/nikki/2021/01/15/post-24125/
※上記ブログ所有者さん、もし不都合あれば仰ってください。本記事は取り下げます。
要件は下記
①Google Chromeをシークレットウィンドウで立ち上げること
②所定のボタンを自動でクリックすること
③メールアドレスなどの固定の入力文字は自動入力すること
作ったVBScriptはこちら
Dim objWshShell
Dim GC
Set objWshShell = WScript.Create’Object("WScript.Shell")
Set GC = CreateObject("WScript.Shell")
'Chromeをシークレットモードで起動
GC.Run ("chrome.exe --incognito -url https://teams.microsoft.com")
objWshShell.AppActivate "chrome.exe"
WScript.Sleep 4000
'Send ALT+F11(ブラウザを全画面表示する)
objWshShell.SendKeys "{F11}"
WScript.Sleep 1000
'指定のボタンまで「Tab」で移動し、ターゲットのボタンで「Enter」を自動押下
For i = 1 To 5
objWshShell.SendKeys "{Tab}"
WScript.Sleep 300
Next
objWshShell.SendKeys "{Enter}"
WScript.Sleep 1000
For i = 1 To 4
objWshShell.SendKeys "{Tab}"
WScript.Sleep 300
Next
objWshShell.SendKeys "{Enter}"
WScript.Sleep 300
'[固定入力文字A]をクリップボードにコピー
Call CreateObject("Wscript.Shell").Run("%COMSPEC% /c echo " & "(固定入力文字A)" & "|clip",0)
WScript.Sleep 300
'貼り付け
objWshShell.SendKeys ("^V")
WScript.Sleep 300
'指定のボタンまで「Tab」で移動し、ターゲットのボタンで「Enter」を自動押下
For i = 1 To 2
objWshShell.SendKeys "{Tab}"
WScript.Sleep 300
Next
objWshShell.SendKeys "{Enter}"
WScript.Sleep 500
'[固定入力文字B]をクリップボードにコピー
Call CreateObject("Wscript.Shell").Run("%COMSPEC% /c echo " & "(固定入力文字B)" & "|clip",0)
WScript.Sleep 300
'貼り付け
objWshShell.SendKeys ("^V")
WScript.Sleep 300
'指定のボタンまで「Tab」で移動し、ターゲットのボタンで「Enter」を自動押下
For i = 1 To 3
objWshShell.SendKeys "{Tab}"
WScript.Sleep 300
Next
objWshShell.SendKeys "{Enter}"
WScript.Sleep 500
'Send ALT+F11(全画面解除)
objWshShell.SendKeys "{F11}"
'ここからは手作業なのでポップアップ出して作業するよう指示(二段階認証)
WScript.Echo "Let's JOIN!!"
WScript.Quit
一つずつ要点を解説
GC.Run ("chrome.exe --incognito -url https://teams.microsoft.com")
--incognito がシークレットウィンドウで開くためのおまじない構文
-url の先に、シークレットウィンドウで開いた先のURLを指定
WScript.Sleep 4000
要所要所に「WScript.Sleep」が入っていますが、これはウェイト(待ち)を意味します。
これがないと処理が先走って正しく動いてくれません。
(全力ダッシュ中、足がもつれて転倒するイメージ…って余計わからんかw
値(ここだと4000=4秒)は、調整してみてください。
処理が失敗するようだと、早すぎるので値は大きくし、逆にストレスに感じるくらい遅い場合、もう少し値を小さくしてみるといいです。
objWshShell.SendKeys "{F11}"
ブラウザがアクティブな状態のとき、キーボードのF11を押すと全画面⇔ウィンドウを切り替えられます。
この処理は、一回全画面にしてしまうという処理です。
これは誤操作封じのための処理です。
スクリプトの処理中、誤って他のウィンドウをアクティブにしてしまうと、そちら側のウィンドウで処理がカタタタタ…って動いてしまいます。
このため、わざと全画面にし、その画面上で処理を行わせるようにしています。
RPAの座標指定処理の場合、ウィンドウ状態だと座標指定ができないため、全画面にして座標指定させるようにすると思います。
これと同じイメージですね。
For i = 1 To 5
objWshShell.SendKeys "{Tab}"
WScript.Sleep 300
Next
objWshShell.SendKeys "{Enter}"
まずはFor文を利用して、キーボードのタブを何回押すかを指定します。
これで、目的のボタンまでタブ移動するんですね。
その回数分Tabを押したら、あとはキーボードのEnterでクリックと同意義の処理を行います。
上記の構文は、下記の画面で「下段のサインイン オプションをクリックする」という処理です。
このサイト上、はじめにカーソルが選択しているのは「メール、電話、Skype」の行なので、そこからTabキーを「5回押す」と、目的のサインイン オプションが選択されます。
サインイン オプションが選択された状態で、Enterを押している、という処理です。
Call CreateObject("Wscript.Shell").Run("%COMSPEC% /c echo " & "(固定入力文字A)" & "|clip",0)
objWshShell.SendKeys ("^V")
入力文字が固定の場合、PCのクリップボードの機能を利用し指定文字を貼り付けします。
上記のスクリプトでは、取引先のドメインでした。
なので、取引先ドメインは固定のため、いったん固定入力文字Aの箇所に記載した内容をクリップボードにコピーし、その後の処理で貼り付け(Ctrl+V)を行うのです。
あとは、ひたすら手入力の箇所まで同じことの繰り返しです。
For文のTab回数を調整したり、入力する固定文字の入力だったりと…。
'Send ALT+F11(全画面解除)
objWshShell.SendKeys "{F11}"
'ここからは手作業なのでポップアップ出して作業するよう指示(二段階認証)
WScript.Echo "Let's JOIN!!"
WScript.Quit
最後に、全画面を終了して(もう一度キーボードのF11を押下する処理を加え)、ポップアップウィンドウで「入力開始」など表示させて(ここではLet's JOIN!!)、WBScriptの処理は終了です。
…と、ここまで記載しておいてなんですが……
米MicrosoftはVBScriptを2023年10月に非推奨言語にすると発表し、さらに、将来的にはWindowsから削除されるって発表しちゃいましたwwwwww
https://xtech.nikkei.com/atcl/nxt/column/18/00682/103100137/#:~:text=同社は2023年10,から削除されるという。
ここまで読んでくれてありがとう!
だがしかし、その時間はムダそのものだwwwwwwwwwwwwww
この記事が気に入ったらサポートをしてみませんか?