「input type=file」で表示されるダイアログの制御方法
未読分:4件
昨日以降(0) 2日前以降(0) 3日前以降(0) 4日前以降(0) 5日前以降(0)
近田 伸矢, 植木 悠二, 上田 寛
IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。
Message#4 2015年4月13日(月)09時09分 From: DSC_渡辺 | 返事 削除 変更 |
どうも、しばらく放置していました。すいません。 ファイルダイアログの自動操作ですが、EXCELVBAからVbscriptを起動することでファィルパスの入力と開くボタンクリックを実現することができました。 ''ファイルダイアログ表示待ちの為に待機 WScript.sleep(5000) Set ObjExcel = WScript.CreateObject("Excel.Application") ''ファイルダイアログのハンドラ取得 DialogHnd = ObjExcel.ExecuteExcel4Macro("CALL(""user32"", ""FindWindowA"", ""JCC"", ""#32770"", """ & ファイルダイアログのタイトル & """)" ) ''ファイルダイアログの各入力項目のハンドラ取得 EditHnd1 = ObjExcel.ExecuteExcel4Macro("CALL(""user32"", ""FindWindowExA"", ""JJJCC"", " & DialogHnd & "," & 0 & ",""ComboBoxEx32""," & vbNullString & ")") EditHnd2 = ObjExcel.ExecuteExcel4Macro("CALL(""user32"", ""FindWindowExA"", ""JJJCC"", " & EditHnd1 & "," & 0 & ",""ComboBox""," & vbNullString & ")") EditHnd3 = ObjExcel.ExecuteExcel4Macro("CALL(""user32"", ""FindWindowExA"", ""JJJCC"", " & EditHnd2 & "," & 0 & ",""Edit""," & vbNullString & ")") ''ファイルパスを入力項目にセット ret = ObjExcel.ExecuteExcel4Macro("CALL(""user32"", ""SendMessageA"", ""JJJJC"", " & EditHnd3 & "," & &HC & "," & 0 & ",""" & ファイルパス & """)") ''開くボタンのハンドラ取得 BtnHnd = ObjExcel.ExecuteExcel4Macro("CALL(""user32"", ""FindWindowExA"", ""JJJCC"", " & DialogHnd & "," & 0 & ",""Button"",""開く(&O)"")") ''開くボタンのコントロールID取得 CtrID = ObjExcel.ExecuteExcel4Macro("CALL(""user32"", ""GetDlgCtrlID"", ""JJ""," & BtnHnd & ")") ''開くボタンをクリック ret = ObjExcel.ExecuteExcel4Macro("CALL(""user32"", ""SendMessageA"", ""JJJJC"", " & DialogHnd & "," & &H111 & "," & CtrID & ",""" & BtnHnd & """)") ObjExcel.Quit Set ObjExcel = nothing WScript.Quit 以上の処理をファイルダイアログが表示されている間に実行することでファイルパス入力と開くボタンクリックに成功し、Web画面のテキストにもファイルパスが表示されました。 ただ、この後にsubmitボタンクリックでファイルアップロードを実行しても、「-2147352319 オートメーション エラーです。」となったり、ファイルアップロードが実行されないという現象が発生しました。 これに関しては別途質問を投げることとします。 どうもお世話をかけました。 |
Message#3 2015年3月19日(木)08時07分 From: DSC_渡辺 | 返事 削除 変更 |
VBAマスターのメッセージ(#2)への返事 > > 昔は選択まで操作できたけど、今はIEのセキュリティ強化のおかげで操作できなくなっていますね。 > > どうしてもやるなら、IEのバージョンを下げて利用するっていう手も1つの手です。 返信ありがとうございます。 IEのバージョンを下げるということはできません。 何か方法がないか、もう少し調査してみます。 |
Message#2 2015年3月18日(水)08時44分 From: VBAマスター | 返事 削除 変更 |
DSC_渡辺のメッセージ(#1)への返事 > web画面で参照ボタン(「input type=file」のボタン)をクリックしてファイルダイアログを表示することはできたのですが、そこで処理が止まり、手操作でボタンをクリックしない限り動かない状況となりました。 昔は選択まで操作できたけど、今はIEのセキュリティ強化のおかげで操作できなくなっていますね。 どうしてもやるなら、IEのバージョンを下げて利用するっていう手も1つの手です。 どこまでのIEだったかは忘れましたがおそらくXPの時代だったのでIE8以下くらいだったと思いますよ。 |
Message#1 2015年3月17日(火)09時52分 From: DSC_渡辺 | 返事 削除 変更 |
サーバーにファイルをアップロードするWeb画面をHTML制御し、自動実行するシステムをEXCELVBAで作成しています。 web画面で参照ボタン(「input type=file」のボタン)をクリックしてファイルダイアログを表示することはできたのですが、そこで処理が止まり、手操作でボタンをクリックしない限り動かない状況となりました。 他の質問掲示板などで調べて以下のように作ってみましたが、うまくいきません。IEバージョンは10.0です。 @ファイル名のテキストボックスにフォーカスを移し、sendkeysでファイル名を入力する。 objIE.Document.Forms("****").Item("****").Select Application.SendKeys "C:\Documents and Settings\****.xxx", True objIE.Document.Forms("****").Item("****").Click 'アップロードボタン押下 Aファイルを開くダイアログを表示させて、SendKeysでフィールドにファイルパスをセットする objElement.Focus WSオブジェクト.SendKeys ("{TAB}") Sleep (1000) WSオブジェクト.SendKeys (" ") Sleep (1000) WSオブジェクト.SendKeys (ファイルパス) Sleep (1000) WSオブジェクト.SendKeys ("{ENTER}") Sleep (1000) Set WSオブジェクト = Nothing @は動作しませんでした。 Aはファイルダイアログの表示までで止まってしまいました。 何か他に方法をご存知の方はいらっしゃいましたら教えてください。 |
昨日以降 2日前以降 3日前以降 4日前以降 5日前以降