UWSCを少し使ってみた。便利。詰まった所など、忘れないように忘備録的なテキスト郡。
目次
- 1 詰まったとき、わからないとき
- 2 何故かIESETDATAが使えないときの代用方法
- 3 IESETDATAでボタンをクリックする方法
- 4 指定したWEBページのBODYの取得
- 5 取得した文字列に邪魔な文字が入ってしまう場合
- 6 文字列の結合
- 7 ウィンドウを指定する。(操作したいウィンドウのIDを取得)
- 8 (webサイトなどを)検索して(指定の文字列が)あるかどうかを判別
- 9 アプリケーション(メモ帳)の起動
- 10 IE.QUITが何故か動作しない。”RPCサーバーを利用できません”エラーが出てしまうときの対処法
- 11 新しいタブを開いて操作
- 12 ファンクションキー(F4)を使用
- 13 ダブルクオーテーション(”)を文字列として扱う方法
- 14 ”記録”機能について
- 15 .readyStateや.busyが使用できない
- 16 UWSCでVBAマクロを実行
- 17 UWSCからPythonスクリプトを実行
- 18 UWSCから.uwsを実行。他のマクロを呼び出す。
詰まったとき、わからないとき
ウェブで検索する前に、とりあえずヘルプを読む。関数名などを検索。フォルダ内のuwsc.chm
何故かIESETDATAが使えないときの代用方法
SENDSTR( ID, 入力したい文字列 , 左上から数えた入力したいエディトコントロールの順番)
(IESETDATAが使えないときの)送信方法
SCKEY( ID, VK_ENTER)
→エンターキーで入力。
IELINK( IE, "リンク表示文字" ,true)
→ボタンをクリック。ボタンに”送信する”と書いてあったら、第2引数に”送信する”と入力。
IESETDATAでボタンをクリックする方法
→ボタンがinput要素、name属性のもの
IESETDATA(IE,1,"name属性の名前")
指定したWEBページのBODYの取得
body = IEGETSRC(IE, "BODY")
特定のタグ以下の文章(classタグ等)を取得
body = Copy(body, Pos("<div class",body), 取得する文字数)
取得したい要素を狭い範囲で取得
変数=BetweenStr(body,"取得したい文字列の開始地点","終点",(複数ある場合は)繰り返し処理のカウント変数)
取得した文字列に邪魔な文字が入ってしまう場合
変数 = REPLACE(変数,"消去したい文字列", "")
文字列の結合
ウィンドウを指定する。(操作したいウィンドウのIDを取得)
変数= GETID("指定したいウィンドウのタイトル。", 待ち時間秒)
(webサイトなどを)検索して(指定の文字列が)あるかどうかを判別
戻値 = POS( 探す文字, 探される文字列, [n個目] )
アプリケーション(メモ帳)の起動
EXEC("起動したいアプリのパス 起動したいファイルのパス")
EXEC("C:\Windows\notepad.exe C:\Users\saiyazin\Desktop\test.txt")
IE.QUITが何故か動作しない。”RPCサーバーを利用できません”エラーが出てしまうときの対処法
原因はよくわからない。繰り返し処理をする前に
CREATEOLEOBJ("InternetExplorer.Application")
繰り返し処理中には
GETACTIVEOLEOBJ("InternetExplorer.Application","webページのタイトル")
を使うことで今回はエラー回避。
また、IEを起動したり閉じたりを連続で繰り返してもエラーが出る。その時はIEでの処理が終わったあとにコマンドプロンプトでIEプロセスの強制終了。
DOSCMD("taskkill /f /im iexplore.exe")
新しいタブを開いて操作
なんか調べたら難しそうだったので、単純な方法で実現。
まず特定のwebサイトを開く
→IDを取得して、ショートカットキーで新しいタブを開く(CTRL,Tキー)
→GETACTIVEOLEOBJで新しいタブを指定
→新しいタブで他のwebサイトを開く
→IDを取得
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
IE = CreateOLEObj("InternetExplorer.Application") IE.Visible = True IE.Navigate("https://amanojaku-late20-hobbyfashion.com/") IE.visible = True sleep(1) ID1 = GETID("https://amanojaku-late20-hobbyfashion.com/", -1) SCKEY( id1,VK_CTRL,T) sleep(3) IE = GETACTIVEOLEOBJ("InternetExplorer.Application","新しいタブ") IE.Navigate("https://amanojaku-late20-hobbyfashion.com/uwsc-command-solution/") IE.visible = True sleep(1) ID2=("https://amanojaku-late20-hobbyfashion.com/uwsc-command-solution/", -1) |
ファンクションキー(F4)を使用
SCKEY( ID, キー)
”キー”の部分にF4
ではなく、VK_F4
ダブルクオーテーション(”)を文字列として扱う方法
"<#DBL>"
”記録”機能について
低レベル記録…単純にキーボードとマウスの情報を座標と共に記録
高レベル記録…座標は記録されない。高レベル関数を使用
.readyStateや.busyが使用できない
おそらく有償版とフリー版では使用できる機能に制限がある?(検証不十分)
Pro(有料)版でないものがあるようだ。
現時点だと有料版は買えない?
2020/05/07追記
UWSCでVBAマクロを実行
結構なゴリ押し、力技。もっとスマートな方法絶対ある。
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
EXCEL = CREATEOLEOBJ("Excel.Application") EXCEL.visible = True EXCEL.workbooks.open("C:\ファイルパス.xlsm") sleep(1) ID = GETID("ファイル名.xlsm") SCKEY( ID,VK_ALT,VK_F11) sleep(1) vbaID = GETID("Microsoft Visual") SCKEY( vbaID,VK_F5) sleep(3) SCKEY( vbaID,VK_CTRL,S) sleep(1) SCKEY( vbaID,VK_ALT,VK_F4) sleep(1) SCKEY( ID,VK_ALT,VK_F4) |
UWSCからPythonスクリプトを実行
exec("C:\ファイルパスpython.exe C:\実行したいファイル名.py")
UWSCから.uwsを実行。他のマクロを呼び出す。
call ファイル名.uws
引数をつけて呼び出すことも可能。
call ファイル名.uws("test")