ポク太郎です。
既に開発終了となって久しいUWSC。が、未だにChrome・FireFoxを制御しようとする方がたくさん。
内容デカすぎなので本ページは下記で1セットの2記事構成。両方参照下さい。
firefox、chromeを実際に操作本ページ
注意点・操作環境・バージョン情報・作成手順等の全体の流れ説明。
|
firefox、chrome操作を試す関数
操作のための関数群と解説。
|
まずUWSCでブラウザ制御する場合の前置き
シェア大のブラウザはChrome・FireFox。EdgeはUWSC開発終了後のだし、大嫌いなマイクロソフト製だし、どうせ役に立たないし知らん。
シェアは上記ですが、UWSCが対応するのはIE・Sleipnirです。
理由は「COMオブジェクト形式を採用してる必要があるから」。(ID・パスワードの設定、その他必要なデータの取得に要。)
なので、UWSCで制御する場合、IE・Sleipnirを使うのが普通で、わざわざChrome・FireFox制御を目指すのはイバラの道だということを最初にお伝えしておきます。
また、わざわざChrome・FireFox操作する必要性も再考推奨。ポク太郎がわざわざChrome・FireFox操作環境を作ったのは「Microsoftが死ぬほど嫌い」「ブログのネタ」だから。
以下に綴っていきますが、一応、UWSCでも制御できます。
ちゃんと制御したいならUWSCwebDriver
下に綴る本ページの概念はブラウザを単なる1つのアプリと見なした一般のUWSCプログラミング。だからバックグラウンド処理は諦めてるし、画像検出も利用する方法。
が、上で述べたようにそれは報われないイバラの道であり、先に“本来行うべき真面目な制御”としてChrome・FireFoxやEdge操作目的のモジュールの紹介。
ただし、ちょっと難易度高めっぽい。まだ試してませんが、UWSC自身だけでなくホームページのHTML構成が頭に入ってないとどうしていいか悩みそうな内容。エレメントとかCSSとか。
JavaScriptを当たり前のように使いこなす方向けのような。
でも真面目なブラウザ制御が目的なら、このUwscWebDriverの使い方をマスターするべきと思います。
ここでのブラウザ操作は仮想環境下の旧バージョン
ブラウザとは更新頻度が桁違い
ブラウザは最もセキュリティが必要なソフトウェアなので更新が頻繁です。
でも、プログラム作成中・運用中にブラウザの仕様・挙動が変わればデバッグがままなりません。という訳で、必要なのは「ブラウザの自動更新オフでバージョンを固定」。
ただし、旧版と共存しバージョン固定にできたとしてもセキュリティ問題は解決できず。
VMware、VirtualBoxなどの仮想環境下で
そのセキュリティの観点から、安全とは言い切れませんが一段かますことになる“仮想環境下”で“ブラウザの自動更新オフ”にして動かすことを目指します。
“仮想環境”とはOS上でOSを動かすVMwareやVirtualBoxのこと。
・VMware製Workstation Player
・Oracle製VirtualBox
仮想環境内には恐らく軽いWinXP、Win7をインストールして使うと思われますが、それも懸念はセキュリティ。当然、自己責任でどうぞ。
Chrome・FireFoxの旧バージョン
旧バージョン配布ページは、
FireFox:FireFoxの旧バージョン。バージョン選ぶ→win32orwin64選ぶ→言語ja選ぶ→。
Chrome:Chromeの旧バージョンはググって下さい。
インストール時の注意は「①インストール前にネット切断→②インストール→③自動更新をオフ設定に→④ネット再接続」としないと起動直後に最新版に書き換えられてしまう点。
自動更新オフ設定は、
FireFox:設定メニュー-一般の中。
Chrome:こちらGoogleのヘルプ参照。
まとめると、
・デバッグままならないので旧バージョン固定で使用。
問題はセキュリティなので、
・PC本体に被害が届きにくいと思われる仮想環境内で使用。
・信頼のおけるページにのみ接続、パスワード要するのは避ける、など。
本ページで操作に使ったブラウザバージョン
UWSC | 5.2.3.0 |
Chrome | 59.0.3071.115(64ビット) |
FireFox | 54.0.1(64ビット) |
UWSCでブラウザ制御する場合に要する関数
UWSCでFireFox、Chromeを制御するのは結構な大仕事なので、ここで必要な機能=関数群をまとめます。
冒頭で言及した1セットとなるもう一方の記事はこれらの機能説明ページです。
1 | ブラウザIDを調べる関数 | UWSCが指令に使うブラウザのアプリケーションIDを調べる機能。 |
2 | ブラウザを起動・準備させる関数 | ブラウザ起動、既に起動中のブラウザをアクティブに戻す機能。 |
3 | ブラウザの窓範囲を得る関数 | 恐らく使うであろう画像検索のための検索範囲を取得する機能。 |
4 | ブラウザを終了させる関数 | 非同期プログラム故の確実に終了させるための機能。 |
5 | タブ作って指定URLを開く関数 | URLを指定し、実際に読み込み命令を行う機能。 |
6 | 読み込み完了を判定する関数 | 読み込み命令~完了まで時間が掛かる非同期プログラムなので、完了判定を行う機能。 |
7 | ブラウザ中のリンクやボタンを調べる関数 | 実際のプログラム構築時に使う、ページ内に存在するアイテム調査ツール的な機能。 |
これらを記述した関数ファイルのダウンロードはこちら。
UWSCで実際にChromeを操作してみた
brwz="chrome" path="C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" tout=15 bstart(path) bopen("https://uwsc-test.blogspot.com/p/uwsc.html") id=bid(brwz) wait_ready(tout) CLKITEM(id,"海外",CLK_ACC) SENDSTR(id,"知るか",2,True) SENDSTR(id,"お前アホやろ",3,True) SLEEP(2) CLKITEM(id,"送信する",CLK_ACC) SLEEP(5) SCKEY(id,VK_ESC) CLKITEM(id,"リンク(別タブで開く)",ITM_LINK) wait_ready(tout) SLEEP(2) SCKEY(id,VK_CTRL,VK_F4) CLKITEM(id,"リンク",ITM_LINK) wait_ready(tout)
1~3行目 | 1 2 3 |
brwz=“chrome“ path=“C:\Program Files (x86)\Google\Chrome\Application\chrome.exe“ tout=15 |
変数を設定しています。グローバル変数brwzにブラウザ名、変数pathにアプリケーションのパス(適宜書き換えてください。)、変数toutはページ表示待ちのタイムアウト[秒]です。 | ||
5~8行目 | 5 6 7 8 |
bstart(path) bopen(“https://uwsc-test.blogspot.com/p/uwsc.html“) id=bid(brwz) wait_ready(tout) |
変数pathで指定されたブラウザを立ち上げ、記載のURLを開き、ブラウザのアプリID取得、読み込み待ちを行います。これらの関数は先項で説明したもの。 画像認識を使ってるので、画像準備が面倒ならwait_ready()関数をSLEEP(15)等、確実に読込完了する時間待ちに変更して下さい。 |
||
10~12行目 | 10 11 12 |
CLKITEM(id,“海外“,CLK_ACC) SENDSTR(id,“知るか“,2,True) SENDSTR(id,“お前アホやろ“,3,True) |
テストページ内にあるプルダウンメニュー、エディットフィールドx2を操作。 UWSC標準命令CLKITEM(アプリID,アイテム名,種別):アプリIDのアイテム名を指定の種別で選択、クリックします。 居住地選択はプルダウンメニュー(ここでは“海外”選択)。
※指定方法がFireFoxと異。ALL_ITEM_LIST調査→プルダウンの選択肢はITM_ACCCLKの種別内にありましたが、Chromeでは10行目のようにCLK_ACCを指定しないと反応しませんでした。(ページにより異なることも十分想定されます。)
11、12行目は、エディットフィールドに文字を送信しています。 |
||
14行目 | 14 | CLKITEM(id,“送信する“,CLK_ACC) |
“送信する”ボタンはITM_ACCCLKの種別内にありました。FireFox、Chrome共にCLK_ACC指定で動きました。 | ||
16~18行目 | 16 17 18 |
SCKEY(id,VK_ESC) CLKITEM(id,“リンク(別タブで開く)“,ITM_LINK) wait_ready(tout) |
ブラウザにESCキーを送信し(送信をキャンセル)、ページ内の“リンク(別タブで開く)”をクリックします。18行目は読み込み待ち。 17行目でのリンクのクリックはITM_LINK指定で操作可能でした。 |
||
20~22行目 | 20 21 22 |
SCKEY(id,VK_CTRL,VK_F4) CLKITEM(id,“リンク“,ITM_LINK) wait_ready(tout) |
ブラウザにCtrl+F4キーを送信し(タブを閉じる)、ページ内の“リンク”をクリックします。22行目は読み込み待ち。 21行目でのリンクのクリックはITM_LINK指定で操作可能でした。 |
||
13,15,19行目 | 13 15 19 |
SLEEP(2) SLEEP(5) SLEEP(2) |
動作を目視確認しやすくするために休止を入れました。 |
と動きました。
UWSCで実際にFireFoxを操作してみた
brwz="firefox" path="C:\Program Files\Mozilla Firefox\firefox.exe" tout=15 bstart(path) bopen("https://uwsc-test.blogspot.com/p/uwsc.html") id=bid(brwz) wait_ready(tout) CLKITEM(id,"海外",ITM_ACCCLK and CLK_BACK) FOR i=0 TO 48 SCKEY(id,VK_DOWN) NEXT SLEEP(0.1) SCKEY(id,VK_ENTER) SENDSTR(id,"知るか",2,True) SENDSTR(id,"お前アホやろ",3,True) SLEEP(2) CLKITEM(id,"送信する",CLK_ACC) SLEEP(5) SCKEY(id,VK_ESC) CLKITEM(id,"リンク(別タブで開く)",ITM_LINK) wait_ready(tout) SLEEP(2) SCKEY(id,VK_CTRL,VK_F4) CLKITEM(id,"リンク",ITM_LINK) wait_ready(tout)
1~3行目 | 1 2 3 |
brwz=“firefox“ path=“C:\Program Files\Mozilla Firefox\firefox.exe“ tout=15 |
変数を設定しています。グローバル変数brwzにブラウザ名、変数pathにアプリケーションのパス(適宜書き換えてください。)、変数toutはページ表示待ちのタイムアウト[秒]です。 | ||
5~8行目 | 5 6 7 8 |
bstart(path) bopen(“https://poku.blog/uwsc-brwztest“) id=bid(brwz) wait_ready(tout) |
変数pathで指定されたブラウザを立ち上げ、記載のURLを開き、ブラウザのアプリID取得、読み込み待ちを行います。これらの関数は先項で説明したもの。 画像認識を使ってるので、画像準備が面倒ならwait_ready()関数をSLEEP(15)等、確実に読込完了する時間待ちに変更して下さい。 |
||
10~17行目 | 10 11 12 13 14 15 16 17 |
CLKITEM(id,“海外“,ITM_ACCCLK and CLK_BACK) FOR i=0 TO 48 SCKEY(id,VK_DOWN) NEXT SLEEP(0.1) SCKEY(id,VK_ENTER) SENDSTR(id,“知るか“,2,True) SENDSTR(id,“お前アホやろ“,3,True) |
テストページ内にあるプルダウンメニュー、エディットフィールドx2を操作。 UWSC標準命令CLKITEM(アプリID,アイテム名,種別):アプリIDのアイテム名を指定の種別で選択、クリックします。 居住地選択はプルダウンメニュー(ここでは“海外”選択)。
※指定方法はCromeと異。ALL_ITEM_LIST調査→プルダウンの選択肢はITM_ACCCLKの種別内にありましたが、FireFoxでは10行目のようにITM_ACCCLK and CLK_BACKと、バックグラウンド指定を追加しないと反応しませんでした。(ページにより異なることも十分想定されます。)
またクリック後、プルダウンが開くだけで指定できず。なので、11~15行目にキーボード入力(↓キーx49回+ENTERキー)を送信→選択→決定しないと動きませんでした。 16、17行目は、エディットフィールドに文字を送信しています。 |
||
19行目 | 19 | CLKITEM(id,“送信する“,CLK_ACC) |
“送信する”ボタンはITM_ACCCLKの種別内にありました。FireFox、Chrome共にCLK_ACC指定で動きました。 | ||
21~23行目 | 21 22 23 |
SCKEY(id,VK_ESC) CLKITEM(id,“リンク(別タブで開く)“,ITM_LINK) wait_ready(tout) |
ブラウザにESCキーを送信し(送信をキャンセル)、ページ内の“リンク(別タブで開く)”をクリックします。23行目は読み込み待ち。 22行目でのリンクのクリックはITM_LINK指定で操作可能でした。 |
||
25~27行目 | 25 26 27 |
SCKEY(id,VK_CTRL,VK_F4) CLKITEM(id,“リンク“,ITM_LINK) wait_ready(tout) |
ブラウザにCtrl+F4キーを送信し(タブを閉じる)、ページ内の“リンク”をクリックします。27行目は読み込み待ち。 26行目でのリンクのクリックはITM_LINK指定で操作可能でした。 |
||
18,20,24行目 | 18 20 24 |
SLEEP(2) SLEEP(5) SLEEP(2) |
動作を目視確認しやすくするために休止を入れました。 |
と動きました。
firefox・chrome操作のUWSCプログラム作成手順
→どれ叩いたらどう動くかを調べながら作成作業を進める
ことになります。
firefox、chromeを実際に操作本ページ
注意点・操作環境・バージョン情報・作成手順等の全体の流れ説明。
|
firefox、chrome操作を試す関数
操作のための関数群と解説。
|
○firefoxやchromeを実際にUWSCで制御
コメント