【UWSC】データをダウンロードするには?
UWSCで、ファイルをダウンロードするサンプルコードを公開します。
ブラウザを立ち上げて、ファイルをダウンロード・保存します。
これを応用すれば、
ファイルを加工したり、メールに添付して送信したり自動でできますよ。
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
// 今日の日付を取得し、ファイル名とする GeTTime() todayMMddforFileName = G_TIME_YY4 + G_TIME_MM2 + G_TIME_DD2 + G_TIME_HH2 + G_TIME_NN2 //日にちと現在の時間を設定( 201901291940) // ダウンロードファイルの設定 dirpath = "C:\Users\〇〇\Downloads" // 保存フォルダ名 今回はダウンロードフォルダ filename = "テスト" + todayMMddforFileName // ファイル名 fileextension =".xlsx" // 拡張子 テキストなら「.txt 」など filepath = dirpath + filename + fileextension //IE起動 Public IE IE = CreateOLEObj("InternetExplorer.Application") IE.Visible = True setOleEvent(IE) //DLしたいサイトへアクセス IE.Navigate("http://▲▲") BusyWait(IE) sleep(1) IEID = GETID("Internet Explorer","IEFrame") // エクセルダウンロードボタンを押す Thread PopupWin("Web ページからのメッセージ","OK") // JavaScriptの確認ダイアログをOKする処理を用意 IESetData(IE,True,"値取得するエレメントのName") // 「DLボタン」 // IE通知バーのハンドル(識別番号)を取得する REPEAT handle = GETCTLHND(IEID,"DirectUIHWND",2) sleep(0.1) UNTIL 0 < handle IENoticeBarID = HNDtoID(handle) //ハンドルをIDに変換 SLEEP(0.1) // エクセルを名前を付けて保存 while CHKBTN(IENoticeBarID, "\保存\名前を付けて保存") < 0 // ボタンが出るまで sleep(0.1) // 待機 wend //CLKITEM(IENoticeBarID, "\保存\名前を付けて保存", CLK_BTN) sleep(0.1) setNameFileDlg( dirpath + filename , fileextension) sleep(0.1) Thread PopupWin("名前を付けて保存の確認","はい") // 上書確認がある場合ははいを押す処理を用意 // 「ダウンロードが完了」と出るまで待ち通知バーを閉じる REPEAT Sleep(0.1) UNTIL 0 < Pos("ダウンロードが完了", GETSTR(IENoticeBarID, 1, STR_ACC_STATIC)) CLKITEM(IENoticeBarID, "閉じる", CLK_ACC) //------ DEF_DLL SendMessageA(Hwnd, Long, Long, Dword): bool: user32 CONST WM_ACTIVATE = $06 Public Pub_url, Pub_docc, Pub_BeforNav_cnt, Pub_DocComp_cnt, Pub_inp_flg Procedure BusyWait(IEObj) Sleep(0.3) tm = GetTime() repeat ifb GetTime() - tm > 90 // TimeOut Pub_docc = ""; Pub_BeforNav_cnt=0; Pub_DocComp_cnt=0 IEObj.Navigate(Pub_url) tm = GetTime() endif Sleep(0.2) ifb Pub_inp_flg Pub_inp_flg = False continue endif if IEObj.busy then continue if !IEObj.readyState=4 then continue if Pub_url = "" then break // No read if (Pos("*"+Pub_url+"*",Pub_docc)) or (Pos("*"+IEObj.LocationURL+"*",Pub_docc)) or (Pub_BeforNav_cnt<=Pub_DocComp_cnt) then else continue errflg = False if IEObj.document.title = "503 Unavailable" then errflg = True if IEObj.document.title = "Service Unavailable" then errflg = True if IEObj.document.title = "503 Service Temporarily Unavailable" then errflg = True ifb errflg Sleep(90) // 503: Wait&Retry tm = 0 continue endif Sleep(0.3) until ! Pub_inp_flg Pub_url=""; Pub_docc=""; Pub_BeforNav_cnt=0; Pub_DocComp_cnt=0 SendMessageA(IEObj.Hwnd, WM_ACTIVATE, 0, 0) Fend Procedure setOleEvent(IEObj) OleEvent(IEObj, "DWebBrowserEvents2", "BeforeNavigate2", "fucBeforNav") OleEvent(IEObj, "DWebBrowserEvents2", "DocumentComplete", "fucDocComp") OleEvent(IEObj, "DWebBrowserEvents2", "OnQuit", "fucQuit") Pub_url=""; Pub_docc=""; Pub_BeforNav_cnt=0; Pub_DocComp_cnt=0; Pub_inp_flg=False Fend Procedure fucBeforNav() ifb (Pos("javascript:",""+EVENT_PRM[1])=0) and ("about:blank"<>""+EVENT_PRM[1]) if Pub_url="" then Pub_url = ""+EVENT_PRM[1] Pub_BeforNav_cnt = Pub_BeforNav_cnt + 1 endif Pub_inp_flg = True Fend Procedure fucDocComp() ifb (Pos("javascript:",""+EVENT_PRM[1])=0) and ("about:blank"<>""+EVENT_PRM[1]) Pub_docc = Pub_docc + "*"+EVENT_PRM[1]+"*" Pub_DocComp_cnt = Pub_DocComp_cnt + 1 endif Pub_inp_flg = True Fend Procedure fucQuit() ExitExit Fend Procedure PopupWin(title, btn, no=-1, str="") sleep(1) GETALLWIN() id = Getid(title,"#32770",10) if no>=0 then Sendstr(id,str,no,True) Clkitem(id,btn) Fend // '名前を付けて保存'ダイアログに名前を設定し保存(fname:保存ファイル名、extens:拡張子) Function setNameFileDlg(fname, extens) Result = False GETALLWIN() sleep(0.3) id = GETID("名前を付けて保存", "#32770", 5) if id < 0 then Exit Sleep(1) pp = -1 for n = 1 to 3 // 検索項目が付加される事がある為Edit順番を確認 ifb Pos(extens, GetStr(id, n))>0 pp = n break endif next if pp < 0 then Exit SendStr(id, fname + extens, pp, True) Result = ClkItem(id, "保存", CLK_BTN or CLK_MUSMOVE) Fend |
変更場所
コードは、以下の部分を修正してくださいね。
1 2 3 4 |
dirpath = "C:\Users\〇〇\Downloads" // 保存フォルダ名 今回はダウンロードフォルダ filename = "テスト" + todayMMddforFileName // ファイル名 IE.Navigate("http://▲▲") IESetData(IE,True,"値取得するエレメントのName") // 「DLボタン」 |
まとめ
UWSCで、ファイルをダウンロードもできるんですね。
メールに添付して送信したり自動でできますよ。
かなり応用がききますね。
ここでしか読めない!話題のやめ太郎さんへの質問
Qiitaに投稿する度、話題になる!
やめ太郎さんが、面白おかしく記事を書けるのは
前職がコールセンターだったから??
Twitterも要チェック☆
ほかにも50名以上のお話が読めるのは、このブログだけ!
やめ太郎さんが、面白おかしく記事を書けるのは
前職がコールセンターだったから??
Twitterも要チェック☆
ほかにも50名以上のお話が読めるのは、このブログだけ!