見出し画像

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を押している、という処理です。

図解:Tabで移動しゴールのところで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


この記事が気に入ったらサポートをしてみませんか?