UWSCでいろいろ出来るのは分かったけど、スクリプトが色々試行錯誤が必要で面倒!
入門講座4回目は、UWSCで出来るだけ簡単にWebを操作する方法を紹介します。
例として、Webにアクセスし、CSVファイルをダウンロードする作業を行っていきたいと思います。
複雑なスクリプトを組まないで済むように、今回は画像認識によるクリックを使っています。
処理の流れ
- Chrome起動
- 検索
- リンククリック
- CSV出力項目設定
- CSV出力
- Chromeを閉じる
スクリプト説明
Chrome起動
////Chromeを起動し気温情報のCSVをダウンロードする////
// クリック位置の調整
Const offset=15
// IEを起動する
FUKIDASI("IE起動中")
// クローム起動(アイコンをダブルクリック)
wclickIMG(".\img\Chrome.bmp",5)
// 最大化をクリック
clickIMG(".\img\max.bmp",3)
~ 略 ~
// 画像を検出してその位置をクリックする
Procedure clickIMG(imgFileName,wait)
IFB CHKIMG(imgFileName)
BTN(LEFT,CLICK, G_IMG_X+offset, G_IMG_Y+offset)
Sleep(wait)
ELSE
MSGBOX("画像認識に失敗しました。")
EXITEXIT
ENDIF
Fend
// 画像を検出してその位置をダブルクリックする
Procedure wclickIMG(imgFileName,wait)
IFB CHKIMG(imgFileName)
BTN(LEFT,CLICK, G_IMG_X+offset, G_IMG_Y+offset)
BTN(LEFT,CLICK, G_IMG_X+offset, G_IMG_Y+offset)
Sleep(wait)
ELSE
MSGBOX("画像認識に失敗しました。")
EXITEXIT
ENDIF
Fend
// 画像を検出するまで待ち受ける
Procedure waitIMG(imgFileName,wait)
While 1
IFB CHKIMG(imgFileName)
break
ELSE
Sleep(wait)
ENDIF
Wend
Fend
clickIMG,wcIMG,waitIMGはいずれも自作関数で、画像認識の処理をしています。
CHKIMG(imgFileName)は、指定した画像と一致する場所のXY座標を取得する関数で、グローバル変数IMG_X、IMG_Yにそれぞれ格納されます。
その後、BTN(LEFT,CLICK, G_IMG_X+offset, G_IMG_Y+offset)でクリックを実施しています。取得できる座標が画像の左上のため、クリックする際はoffsetで少し位置をずらしています。
wclickIMG(“.\img\Chrome.bmp”,5)の第一引数でクロームのアイコン画像のスクリーンショットを指定しています。第二引数は、クリック後の待ち受け時間を指定できます。
// 検索窓に「気温 CSV」と入力しEnter
id=GetID("Google Chrome")
SendStr(id,"気温 CSV")
SCKey(id,VK_RETURN)
// 検索結果が表示されるまで待つ
waitIMG(".\img\kisyou.bmp",3)
// 気象庁のHPをクリック
clickIMG(".\img\kisyou.bmp",3)
// 東京をクリック
clickIMG(".\img\tokyo.bmp",3)
// 世田谷をクリック
clickIMG(".\img\setagaya.bmp",3)
// 項目をクリック
clickIMG(".\img\koumoku.bmp",3)
// 平均気温をクリック
clickIMG(".\img\kion.bmp",3)
// CSV出力をクリック
clickIMG(".\img\save.bmp",3)
// 閉じるボタンをクリック
clickIMG(".\img\close.bmp",3)
GetID、SendSTR、SCKeyを使用して、Chromeの検索窓に文字列を入力してEnterを押下しています。
関数の説明については、以下の第1回講座を参照ください。
以降はひたすら、画像を指定してクリックの繰り返しです。
今回は、気象庁のホームページで条件を指定してCSVファイルをダウンロードしています。
要素に付与されている属性によっては、クリックできないこともある方式と比較して、この方法には、取得する画像を変えればどのホームページにも適用できる利点があります。
完成版スクリプト
////Chromeを起動し気温情報のCSVをダウンロードする////
// クリック位置の調整
Const offset=15
// IEを起動する
FUKIDASI("IE起動中")
// クローム起動(アイコンをダブルクリック)
wclickIMG(".\img\Chrome.bmp",5)
// 最大化をクリック
clickIMG(".\img\max.bmp",3)
// 検索窓に「気温 CSV」と入力しEnter
id=GetID("Google Chrome")
SendStr(id,"気温 CSV")
SCKey(id,VK_RETURN)
// 検索結果が表示されるまで待つ
waitIMG(".\img\kisyou.bmp",3)
// 気象庁のHPをクリック
clickIMG(".\img\kisyou.bmp",3)
// 東京をクリック
clickIMG(".\img\tokyo.bmp",3)
// 世田谷をクリック
clickIMG(".\img\setagaya.bmp",3)
// 項目をクリック
clickIMG(".\img\koumoku.bmp",3)
// 平均気温をクリック
clickIMG(".\img\kion.bmp",3)
// CSV出力をクリック
clickIMG(".\img\save.bmp",3)
// 閉じるボタンをクリック
clickIMG(".\img\close.bmp",3)
// 画像を検出してその位置をクリックする
Procedure clickIMG(imgFileName,wait)
IFB CHKIMG(imgFileName)
BTN(LEFT,CLICK, G_IMG_X+offset, G_IMG_Y+offset)
Sleep(wait)
ELSE
MSGBOX("画像認識に失敗しました。")
EXITEXIT
ENDIF
Fend
// 画像を検出してその位置をダブルクリックする
Procedure wclickIMG(imgFileName,wait)
IFB CHKIMG(imgFileName)
BTN(LEFT,CLICK, G_IMG_X+offset, G_IMG_Y+offset)
BTN(LEFT,CLICK, G_IMG_X+offset, G_IMG_Y+offset)
Sleep(wait)
ELSE
MSGBOX("画像認識に失敗しました。")
EXITEXIT
ENDIF
Fend
// 画像を検出するまで待ち受ける
Procedure waitIMG(imgFileName,wait)
While 1
IFB CHKIMG(imgFileName)
break
ELSE
Sleep(wait)
ENDIF
Wend
Fend
まとめ
第4回の講座として、画像ファイルを使って画面をクリックする手法を紹介しました。
この手法はスクリプトを考える必要がない反面、画像を大量に取得する必要があり、また、少しでも画像が変わってしまうと対応できないなど、汎用性に欠ける面があります。
どちらも一長一短なため、状況に応じて使い分けるのが最良かと思います。
自分の場合は、極力スクリプトで対応し、どうしてもクリックできない要素があった場合のみ、画像対応するようにしています。
次回は、Web上のデータの自動取集方法について紹介したいと思います。
コメント