【UWSC】なぜまだUWSCで大丈夫なの?

UWSC
スポンサーリンク

Windows11でも動作可能なUWSCは環境設定がPythonに比べて楽!

2020.5.9時点でWindows11環境で問題なく動作している【UWSC】

Windows11でもWin10に引き続きJRAホームページからの「データ収集」+加工が成功しているように、まだまだ使えるソフトであることは既に当ブログで証明済!

  • Windowsでの環境構築が他よりも圧倒的に簡単
    • パソコン①でインストールした【UWSC】フォルダー毎、パソコン②へコピー動作可能
    • テキスト収集ならChromeも新Edgeも操作可能
    • ファイルサイズが小さい(5M程度)
  • 各パソコンからの起動となるため、Web上の基本操作でデータ取集するためサーバーへの負荷は通常の操作とほぼ変わらない
  • ExcelVBAマクロとの文法上の相性がどちらもBasic言語なので大きく逸れることがなく「命令」が同一的に覚えやすい。VBAの財産があればあるほど【UWSC】活用の方が簡単に目的を達成しやすい
  • 既にサポートがないので、新しい技術には使えない!

Pythonを使った方が良いかな?と思うところ

  • LinuxOSでも使える
  • バックグラウンド処理がUWSCよりもやりやすい
  • ビッグデータを使ったAI分析など次のステップへ移行しやすい
  • 世界標準になる勢いの言語だけに、これからのプログラミング需要が期待できる
    • プログラマーとしての価値は高くなる言語と思われる

私がまだ【UWSC】に傾注している理由

  • MicrosoftがChromium化したことで、再度使えるようになったこと
    • ブラウザーの選択肢が1つから2つになった
    • ①Chrome,②MS-Edge
  • UWSC構文はBasic的で、ExcelVBA同様に自動記録機能がある
  • 既にあるExcelVBAとAccessVBAの個人資産を継続利用できる
    • 一からシステムを組む必要がない
    • 今のところスクレイピングで拾うのは「テキスト」のみ
    • 個人的なシステム構築のゴールがAccess[.accdb]+SQL-Server(Express)
    • Excelメイン+Googleスプレッドシート補足が機能している
  • WindowsユーザーがLinuxOSやGoogle環境だけでシステム環境を整えるだけでも、スキルアップが、かなり必要!
    • Windows(スタンドアロン)+Google(Web)
    • OneDrive+Googleドライブ
    • Googleを補助的な使い方をする
  • 今の知識のまま、段階的に運用しながらシステム構築が可能
    • Excelが得意なところはExcelVBA
    • テキストコピペだけ【UWSC】…今
    • 【UWSC】が使えなくなった時、テキストコピペだけ他のツールを探せば良い!
  • 最終ゴールは、システム構築ではなく「データ分析」の活用と「時間運用」
    • 馬券を当てたい!
    • ブログネタを集めたい!
    • 一人で多重行動化し時間獲得!

例:自作競馬データベースのスクレイピング作業の移行手順

  1. 手動でWebをExcelシートにコピペ → 【UWSC】でスクレイピング
  2. Excelでデータ加工をし表形式に整列
  3. 手動で表データをMS-Accessを利用してSQL-Server(EXPRESS)に投入
  4. MS-Access操作はマクロでワンクリックで自動化

2~4というシステムを先に作っておき、1.手動・・・をUWSCで自動化したところまで完成している。これを更に完全自動で動かす!?。。。その必要はないな~と感じている。

※ここまでが、2022.5.9追記分。

adono
adono

以下は、2020.1.13ブログ投稿時の文そのまま。

2019.12.28(土)第36回 ホープフルステークスGⅠを表示してみる

サンプルには、JRAレース結果を使用する。

出走表は、当週しか表示できないので今回のブログ説明のサンプルとしては、これからも閲覧可能な「レース結果」を使うことにする。

①手動で操作:2019.12.28 ホープフルステークス

JRAのホームページ>レース結果>過去レース結果検索>開催年選択「2019」>開催月選択「12」検索>中山 ホープフルステークスGⅠ

②Chrome+UWSCで表示:2019.12.28 ホープフルステークス

  • CPU i7-6500U
  • CPU i3-330m

※スペックが大きく違うCPUで両方ともに動作するのを確認した。

※ご利用の際はUWSCの緊急停止は少なくともできるようになってから利用すること。

デフォルトなら

『 ALT + F2 』で強制停止!

※プログラムの二次利用は自己責任で行うこと。

画面操作のCTRL+Fを利用する。

CLKITEMというUWSCの命令がある。IEでは動作するが、Chromeでは動かない。

そこで通常のキーボード操作と同じでChrome上でテキストを「CTRL+V」でコピペする方法で

アイテムをクリックする方法で目的のページに辿り着く方法を取っている。

Pythonのスクレイピングに比べてかなり遅い処理になり大量のページを素早く取り込むことはできないが、手動と同じ操作のため動きの制御は「キーボード操作」をそのまま自動化するだけなので簡単で処理が分かり易い。

//コンピュータ名を取得する
DIM WshShell = CREATEOLEOBJ("WScript.Shell")
comname= trim(WshShell.ExpandEnvironmentStrings("%COMPUTERNAME%"))
//print "COMPUTERNAME:" + comname

//jraのホームページを立ち上げる

//TEST中はCloseしない
//CTRLWIN(GETID("chrome"),close)
exec("cmd /c start=http://www.jra.go.jp/sitemap/")
sleep(1)
ID=GETID("サイトマップ","chrome")
sleep(0.5)
CTRLWIN(ID,ACTIVATE)
sleep(0.5)
ret=STATUS(ID, ST_ACTIVE)
ifb !ret then
	print "「サイトマップ」ではありません"
	print ID
	sleep(5)
	exit	
endif

//サイトマップから 文字列検索し「レース結果」をクリック
sleep(1)
SENDSTR(0, "レース結果") //クリップボードに文字を送る
sleep(0.5)
KBD(VK_CTRL,DOWN)
KBD(VK_F,DOWN)
sleep(0.5)
KBD(VK_CTRL,UP)
KBD(VK_F,UP)
sleep(0.5)
KBD(VK_CTRL,DOWN)
KBD(VK_V,DOWN)
sleep(0.5)
KBD(VK_CTRL,UP)
KBD(VK_V,UP)
sleep(0.5)
KBD(VK_ESC,CLICK)
sleep(0.5)
KBD(VK_RETURN,CLICK)
sleep(1)
ID=GETID("レース結果 開催選択","chrome")
sleep(0.5)
CTRLWIN(ID,ACTIVATE)
sleep(0.5)
ret=STATUS(ID, ST_ACTIVE)
ifb !ret then
	print "「レース結果 開催選択」ではありません"
	print ID
	sleep(5)
	exit	
endif

//レース結果 開催選択から 文字列検索し「過去レース結果検索」をクリック
sleep(1)
SENDSTR(0, "過去レース結果検索") //クリップボードに文字を送る
sleep(0.5)
KBD(VK_CTRL,DOWN)
KBD(VK_F,DOWN)
sleep(0.5)
KBD(VK_CTRL,UP)
KBD(VK_F,UP)
sleep(0.5)
KBD(VK_CTRL,DOWN)
KBD(VK_V,DOWN)
sleep(0.5)
KBD(VK_CTRL,UP)
KBD(VK_V,UP)
sleep(0.5)
KBD(VK_ESC,CLICK)
sleep(0.5)
KBD(VK_RETURN,CLICK)
sleep(1)
ID=GETID("過去レース結果検索","chrome")
sleep(0.5)
CTRLWIN(ID,ACTIVATE)
sleep(0.5)
ret=STATUS(ID, ST_ACTIVE)
ifb !ret then
	print "「過去レース結果検索」ではありません"
	print ID
	sleep(5)
	exit	
endif
sleep(1)

//過去レース結果検索から 文字列検索し「開催年月」を選択
sleep(1)
SENDSTR(0, "開催年月") //クリップボードに文字を送る
sleep(0.5)
KBD(VK_CTRL,DOWN)
KBD(VK_F,DOWN)
sleep(0.5)
KBD(VK_CTRL,UP)
KBD(VK_F,UP)
sleep(0.5)
KBD(VK_CTRL,DOWN)
KBD(VK_V,DOWN)
sleep(0.5)
KBD(VK_CTRL,UP)
KBD(VK_V,UP)
sleep(0.5)
KBD(VK_ESC,CLICK)
sleep(0.5)
KBD(VK_TAB,CLICK)
sleep(0.5)
KBD(VK_2,CLICK)
KBD(VK_0,CLICK)
KBD(VK_1,CLICK)
KBD(VK_9,CLICK)
KBD(VK_TAB,CLICK)
sleep(0.5)
KBD(VK_1,CLICK)
KBD(VK_2,CLICK)
KBD(VK_TAB,CLICK)
KBD(VK_RETURN,CLICK)
sleep(1)
ID=GETID("過去レース結果検索","chrome")
sleep(0.5)
CTRLWIN(ID,ACTIVATE)
sleep(0.5)
ret=STATUS(ID, ST_ACTIVE)
ifb !ret then
	print "「過去レース結果検索」ではありません"
	print ID
	sleep(5)
	exit	
endif

//過去レース結果検索から 文字列検索し「ホープフルステークス」をクリック
sleep(1)
SENDSTR(0, "ホープフルステークス") //クリップボードに文字を送る
sleep(0.5)
KBD(VK_CTRL,DOWN)
KBD(VK_F,DOWN)
sleep(0.5)
KBD(VK_CTRL,UP)
KBD(VK_F,UP)
sleep(0.5)
KBD(VK_CTRL,DOWN)
KBD(VK_V,DOWN)
sleep(0.5)
KBD(VK_CTRL,UP)
KBD(VK_V,UP)
sleep(0.5)
KBD(VK_ESC,CLICK)
sleep(0.5)
KBD(VK_RETURN,CLICK)
sleep(1)
ID=GETID("レース結果","chrome")
sleep(0.5)
CTRLWIN(ID,ACTIVATE)
sleep(0.5)
ret=STATUS(ID, ST_ACTIVE)
ifb !ret then
	print "「レース結果」ではありません"
	print ID
	sleep(5)
	exit	
endif
sleep(1)

UWSCのメニューから上記:20181228ホープフル.UWS「再生」すると目的のページまでナビをしてくれているかのように連れていってくれるだろう。

Sleepの数や秒数は自分のパソコン環境に合わせて変化させることにより快適にすることができる。

上記コンピューター名の取得は今回のホームページ表示とは直接関係ないが、参考として載せている。

※プログラムの是非や内容についての質問にはお答え致しません。

③Chrome+Pythonで表示:2019.12.28 ホープフルステークス

  • CPU i3-330m (テスト用のノートパソコンで実行)

VSCodeからデバッグ後実行でインスタンス表示し10秒後にCloseする。

UWSCと同様の動きにしている。

私もPythonは勉強中なので、一行一行ググって調べてテストしての繰り返しをひたすら行っている。今回も継ぎ接ぎながら、なんとか目的のページまで到達することができた。

#selenium準備
from selenium import webdriver
from selenium.webdriver.support.select import Select
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
from time import sleep
#Chromeを起動
driver = webdriver.Chrome('C:\chromedriver_win32\chromedriver')
#指定したURL表示
driver.get("http://www.jra.go.jp/sitemap/")
#リンクテキスト名=対象リンク要素を取得
element = driver.find_element_by_link_text("レース結果")
#Controlキーを押しながら"レース結果"のリンクをクリック
actions = ActionChains(driver)
actions.key_down(Keys.CONTROL)
actions.click(element)
actions.key_up(Keys.CONTROL)
actions.perform()
sleep(3)

element = driver.find_element_by_link_text("過去レース結果検索")
#Controlキーを押しながら"レース結果"のリンクをクリック
actions = ActionChains(driver)
actions.key_down(Keys.CONTROL)
actions.click(element)
actions.key_up(Keys.CONTROL)
actions.perform()
sleep(3)

# 年のエレメントを取得する
element = driver.find_element_by_id('kaisaiY_list')
# 取得したエレメントをSelectタグに対応したエレメントに変化させる
select_element = Select(element)
# 選択したいvalueを指定する
select_element.select_by_value('2019')

# 月のエレメントを取得する
element = driver.find_element_by_id('kaisaiM_list')
select_element = Select(element)
select_element.select_by_value('12')

element = driver.find_element_by_link_text("検索")
#Controlキーを押しながら"レース結果"のリンクをクリック
actions = ActionChains(driver)
actions.key_down(Keys.CONTROL)
actions.click(element)
actions.key_up(Keys.CONTROL)
actions.perform()
sleep(3)

element = driver.find_element_by_link_text("ホープフルステークス")
#Controlキーを押しながら"レース結果"のリンクをクリック
actions = ActionChains(driver)
actions.key_down(Keys.CONTROL)
actions.click(element)
actions.key_up(Keys.CONTROL)
actions.perform()
sleep(3)

#10秒表示して閉じる
sleep(7)
#インスタンスウインドウを閉じる
driver.close()

※プログラムの是非や内容についての質問にはお答え致しません。

編集後記

UWSCの後継を考えるとWindows11環境下なら【PAD】になるのか?

私はまだ使いこなせていない。。。

【PAD】こちらの方が【Python】を使うよりもWindows11環境下では使えそうな気はしているが、VBAだけでなく今後、Excel関数や埋め込み型のマクロ登録などから簡単に使えるとなると、エンドユーザーツールとして一気に広がりを見せる可能性はある。

例えば、スクレイピングしたいWeb上のデータをAccessのテーブルの項目に紐付け出来たりするとExcelVBAでの表加工は必要なくなるので、誰でも簡単にデータベースが作れてしまう。ほとんどのWebスクレイピングはこの体(テイ)なので、これに画像・動画など新しいデータ保存の形が出来上がると、データ収集のプログラミングは全てそれになる可能性があるが・・・

今の流れがクラウドなだけに、

【Python】なのか?【PAD】なのか?【GAS】なのか?

クラウド上で動かせるプログラミング言語はどれになるのか?

【UWSC】は、既にサポート終了しているので今後は、

  • Python
  • PAD
  • GAS

から、使えそうなモノを選択する。という流れだが、

個人で使う分には、【UWSC】を使えるまで使い倒してどうしてもダメ!ってなった時に色々考えるぐらいで良いのではないかな?と思っている。

昔の旧Edgeのような仕様変更があると【UWSC】でウィンドウが掴めなくなりジ・エンドとなるが、結局EdgeがダメならChromeがあるさ!と「IE+UWSC」から「Chrome+UWSC」に変えてほとんど基幹となる部分は動かすことができた。

画面の座標とかテキストとか画像とか表面的なモノの情報が【UWSC】で拾える限り、これが有効なツールであることは明白なので、コピペ後の処理を今までのツールにやらせるだけで良い。これだけでもプログラムを全部移植する時間は格段に減るのである。

私が今一番期待しているのは、Linux版のJRA-VANアプリが開発されること

こうなると、ある程度の便利さを捨てれば、全てLinuxに移す心の準備が整うので【Python】での開発意欲が増すと思われる。

ただ今はしばしブログに傾注したいので、結局Windowsのままになるのかな~?

ただLinuxはタダだからねぇ~~

Pythonもタダだからねぇ~

まぁまぁこの辺はブログで収益出だしたら、ゆっくり考えようw

それでは、またね~😎

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