UWSC|firefoxやchromeを実際に操作してみた

【ご注意】本ページはあまりに古い情報だったので全面書き換えし、今現状でもできそうな?問題なさそうな?内容に修正しました。

ポク太郎です。

既に開発終了となって久しいUWSC。が、未だにChromeFireFoxを制御しようとする方がたくさん。

内容デカすぎなので本ページは下記で1セットの2記事構成。両方参照下さい。

UWSCChromeFireFox操作別窓で開きます。
firefox、chromeを実際に操作本ページ

注意点・操作環境・バージョン情報・作成手順等の全体の流れ説明。
firefox、chrome操作を試す関数

操作のための関数群と解説。


まずUWSCでブラウザ制御する場合の前置き

シェア大のブラウザはChromeFireFoxEdgeUWSC開発終了後のだし、大嫌いなマイクロソフト製だし、どうせ役に立たないし知らん。

引用:Shift Asia~【2022年6月】日本とグローバルのWEBブラウザシェアランキング(PC・モバイル)

シェアは上記ですが、UWSCが対応するのはIESleipnirです。

理由は「COMオブジェクト形式を採用してる必要があるから」。(ID・パスワードの設定、その他必要なデータの取得に要。)

なので、UWSCで制御する場合、IESleipnirを使うのが普通で、わざわざChromeFireFox制御を目指すのはイバラの道だということを最初にお伝えしておきます。

また、わざわざChromeFireFox操作する必要性も再考推奨。ポク太郎がわざわざChromeFireFox操作環境を作ったのは「Microsoftが死ぬほど嫌い」「ブログのネタ」だから。

以下に綴っていきますが、一応UWSCでも制御できます。

FireFoxが爆速になったバージョン57辺りでUWSC制御に必要なアクセシビリティが仕様変更で全く見えず→もう無理と判断→でも最近バージョン111だと見える→一応動かせます。時期的にChromeも似たような感じ。

ちゃんと制御したいならUWSCwebDriver

下に綴る本ページの概念はブラウザを単なる1つのアプリと見なした一般のUWSCプログラミング。だからバックグラウンド処理は諦めてるし、画像検出も利用する方法。

が、上で述べたようにそれは報われないイバラの道であり、先に“本来行うべき真面目な制御”としてChromeFireFoxEdge操作目的のモジュールの紹介。

ただし、ちょっと難易度高めっぽい。まだ試してませんが、UWSC自身だけでなくホームページのHTML構成が頭に入ってないとどうしていいか悩みそうな内容。エレメントとかCSSとか。

JavaScriptを当たり前のように使いこなす方向けのような。

でも真面目なブラウザ制御が目的なら、このUwscWebDriverの使い方をマスターするべきと思います。

ここでのブラウザ操作は仮想環境下の旧バージョン

ここから本ページの概念で操作する場合の環境構築の話。

ブラウザとは更新頻度が桁違い

ブラウザは最もセキュリティが必要なソフトウェアなので更新が頻繁です。

でも、プログラム作成中・運用中にブラウザの仕様・挙動が変わればデバッグがままなりません。という訳で、必要なのは「ブラウザの自動更新オフでバージョンを固定」。

ただし、旧版と共存しバージョン固定にできたとしてもセキュリティ問題は解決できず。

VMware、VirtualBoxなどの仮想環境下で

そのセキュリティの観点から、安全とは言い切れませんが一段かますことになる“仮想環境下”で“ブラウザの自動更新オフ”にして動かすことを目指します。

“仮想環境”とはOS上でOSを動かすVMwareVirtualBoxのこと。
VMware製Workstation Player
Oracle製VirtualBox

仮想環境内には恐らく軽いWinXP、Win7をインストールして使うと思われますが、それも懸念はセキュリティ。当然、自己責任でどうぞ。

Chrome・FireFoxの旧バージョン

旧バージョン配布ページは、
FireFoxFireFoxの旧バージョン。バージョン選ぶ→win32orwin64選ぶ→言語ja選ぶ→。
ChromeChromeの旧バージョンはググって下さい

FireFoxバージョン57で爆速になりましたが56の時点でWinXPがサポート外へ。でもサポート限界の55以前までは激重でした。なので、仮想環境下で使うなら相当古いもの(40近辺?)でないと動作速度的にキツイはず。

インストール時の注意は「①インストール前にネット切断→②インストール→③自動更新をオフ設定に→④ネット再接続」としないと起動直後に最新版に書き換えられてしまう点。

自動更新オフ設定は、
FireFox:設定メニュー-一般の中。
ChromeこちらGoogleのヘルプ参照

まとめると、
・デバッグままならないので旧バージョン固定で使用。
問題はセキュリティなので、
・PC本体に被害が届きにくいと思われる仮想環境内で使用。
・信頼のおけるページにのみ接続、パスワード要するのは避ける、など。

本ページで操作に使ったブラウザバージョン

本ページでUWSC制御確認した際のバージョンはこちら。

UWSCで実際に操作したChromeFireFoxバージョン
UWSC 5.2.3.0
Chrome 59.0.3071.115(64ビット)
FireFox 54.0.1(64ビット)

UWSCでブラウザ制御する場合に要する関数

UWSCFireFoxChromeを制御するのは結構な大仕事なので、ここで必要な機能=関数群をまとめます。

冒頭で言及した1セットとなるもう一方の記事はこれらの機能説明ページです。

UWSCFireFoxChromeを制御するための関数
1 ブラウザIDを調べる関数 UWSCが指令に使うブラウザのアプリケーションIDを調べる機能。
2 ブラウザを起動・準備させる関数 ブラウザ起動、既に起動中のブラウザをアクティブに戻す機能。
3 ブラウザの窓範囲を得る関数 恐らく使うであろう画像検索のための検索範囲を取得する機能。
4 ブラウザを終了させる関数 非同期プログラム故の確実に終了させるための機能。
5 タブ作って指定URLを開く関数 URLを指定し、実際に読み込み命令を行う機能。
6 読み込み完了を判定する関数 読み込み命令~完了まで時間が掛かる非同期プログラムなので、完了判定を行う機能。
7 ブラウザ中のリンクやボタンを調べる関数 実際のプログラム構築時に使う、ページ内に存在するアイテム調査ツール的な機能。

これらを記述した関数ファイルのダウンロードはこちら。

UWSCで実際にChromeを操作してみた

Chrome起動→UWSC奮闘記テストページ開く→内部のアイテムを順番に操作するプログラムです。

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)
Chromeを制御するプログラム説明
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行目は、エディットフィールドに文字を送信しています。
UWSC標準命令SENDSTR(アプリID,文字列,番号,モード):アプリIDの番号のエディットフィールドに文字列を送信。モードはTrueで書き換え、Falseで追記。

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を操作してみた

FireFox起動→UWSC奮闘記テストページ開く→内部のアイテムを順番に操作するプログラムです。Chromeに比べアイテムの選択に時間が掛かるようです。

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)
FireFoxを制御するプログラム説明
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行目は、エディットフィールドに文字を送信しています。
UWSC標準命令SENDSTR(アプリID,文字列,番号,モード):アプリIDの番号のエディットフィールドに文字列を送信。モードはTrueで書き換え、Falseで追記。

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プログラム作成手順

ChromeFireFox操作プログラムを実際に作る場合は、

ここで自作したボタン・リンクを調べる機能inv_item()関数でページ内のアイテム調査
→どれ叩いたらどう動くかを調べながら作成作業を進める

ことになります。

UWSCChromeFireFox操作別窓で開きます。
firefox、chromeを実際に操作本ページ

注意点・操作環境・バージョン情報・作成手順等の全体の流れ説明。
firefox、chrome操作を試す関数

操作のための関数群と解説。
本記事の内容は以下でした。
○firefoxやchromeを実際にUWSCで制御

コメント

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