超丁寧UWSC入門講座④:画像認識でWeb操作を行う方法を紹介

UWSC

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)の第一引数でクロームのアイコン画像のスクリーンショットを指定しています。第二引数は、クリック後の待ち受け時間を指定できます。

注意
画像認識は、BMP形式にのみ対応しています。

// 検索窓に「気温 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上のデータの自動取集方法について紹介したいと思います。

自動化ネタを募集しています。業務で実際に困っていることなどの情報を頂ければ、自動化いたしますので、問い合わせフォームやTwitter等でご連絡いただければと思います。

コメント

タイトルとURLをコピーしました