下記URLを参考にUIAutomationClientを利用して通知バーを制御していますが、通知バーはでているのにボタン取得に失敗しやすいです。
また、分割の名前を付けて保存
http://okwave.jp/qa/q8121989.html
基本的にSetの箇所にDo while オブジェクト is nothingを入れて確実に取得できるようにしました。しかし、そうすると取得までに時間がかかる場合があります。時間短縮の方法をアドバイス頂きたいのがこの度の趣旨になります。
具体的にはダウンロード時に名前を付けて保存をしたいのですが、例えば保存バーがでているのにドロップボタンを押すまで時間がかかる。また、ドロップボタンは押せているのに名前を付けて保存をなかなかすぐに押してくれないといった感じです。またその後の保存ダイアログでも同様に、表示されているのになかなか押してくれないといった状況です。
やはり、オブジェクトの取得がうまくできていないためWhileでぐるぐると取得するのに時間を費やしているようでした。どのようにすれば時間短縮ができるかアドバイス頂けると助かります。回答でなくても、これやってみたら?みたいな感じでアドバイス頂けると助かります。
宜しくおねがいします。
No.1ベストアンサー
- 回答日時:
IE制御に於いてループ中のDoEventsは遅延を招くそうで、Sleepに置き換えるとか。
(ネットワークタブでキャプチャすれば)
後は、F12Chooser.exeを制御してダイアログや通知バーが表示されるタイミングで、ファイルへのアドレスが分かるので、
(UI Automation辺りで)
XMLHTTPとADODB.Streamの組み合わせでダウンロードするとか、ぐらいですかね。
ご返信遅れまして大変失礼いたしました。
只今新しい質問をしようと久しぶりに開いたら返信をし忘れておりました。
WindFallerさんにもご回答頂いていたようで、もしかしたらそちらも効果があるのかもしれませんが、kumatti_1さんのご意見を採用させて頂きました。
結果は、失敗率が激減致しました。
本当にありがとうございました。
新しい質問は、タイトル以下のとおりです。お時間有りましたらよろしくお願いいたします。
VBA:ホームページ内のデータテーブルスクロールバーの操作
No.3
- 回答日時:
この前から、私が開発していたものを見ていただけますか?#1さんのおっしゃっていたものは、一度でダウンロード先が取れるものならよいのですが、Vector のように、サイト内で二回ダウンロード先を探しているのです。
なかなか手間が掛かります。以下は、うまくいかない時は、ひとつは、URLを確かめてください。後は、IEキャッシュの問題があるかもしれません。'//
Private Declare Function URLDownloadToFile Lib "urlmon" Alias _
"URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal _
szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
Private Declare Function DeleteUrlCacheEntry Lib "wininet" Alias "DeleteUrlCacheEntryW" ( _
ByVal lpszUrlName As Long) As Long
Sub Vector_DownLoadMacro()
Dim VectorURL As String
''==================
''ソフト名:Getswf
''仕様:IEやOperaのキャッシュファイル(FLASH、画像、動画等)を簡単に仕分け・保存
VectorURL = "http://www.vector.co.jp/soft/winnt/net/se404798. …
''=================
'URLを修正
If InStr(1, VectorURL, "/dl") = 0 Then
VectorURL = Replace(VectorURL, "/soft/", "/soft/dl/", , 1, 1)
End If
Dim Access_Location As String
Dim objIE As SHDocVw.InternetExplorer '
Set objIE = CreateObject("InternetExplorer.Application")
Dim objShellWin As Object ''As Microsoft Shell Controls And Automation
Dim flg As Boolean
Dim w As Object
Const baseKeyWord As String = "www.vector.co.jp/soft/dl"
Set objShellWin = CreateObject("Shell.Application").Windows()
If objShellWin.Count = 0 Then Exit Sub
For Each w In objShellWin
If TypeName(w) = "IWebBrowser2" Then
If InStr(1, w.LocationURL, baseKeyWord, 1) > 0 Then
Set objIE = w
flg = True
Exit For
End If
End If
Next
Dim newURL As String
Dim DLoadURL As String
Dim DLName As String
Dim btn As Object
objIE.Navigate2 VectorURL
objIE.Visible = True
Do While objIE.Busy Or objIE.readyState <> 4: DoEvents: Loop
With objIE
Set btn = .document.getElementsByClassName("btn download")
If btn.Length = 0 Then MsgBox "失敗しました。", vbExclamation: Exit Sub
newURL = btn(0).href
.Navigate2 newURL
Do While objIE.Busy Or objIE.readyState <> 4: DoEvents: Loop
End With
With objIE
Dim oData As Object
Dim oData_c As Object
Dim i As Long
Dim downURL As String
Dim buf
Set oData = .document.getElementById("summary")
Set oData_c = oData.ChildNodes
For i = 1 To oData_c.Length - 1
'On Error Resume Next
If TypeName(oData_c(i)) = "HTMLParaElement" Then
If InStr(1, oData_c(i).innerHTML, "ftp", vbTextCompare) > 0 Then
buf = oData_c(i).innerHTML
If buf <> "" Then
DoEvents
Exit For
End If
End If
End If
'On Error GoTo 0
Next
buf = Mid(buf, InStr(1, buf, "http:"))
downURL = Mid(buf, 1, InStr(1, buf, ">") - 2)
Call URLDownloads(downURL)
.Quit
End With
Set objIE = Nothing
End Sub
Sub URLDownloads(ByVal strURL As String)
Const myDOWNDIR As String = "C:\Users\Wendy\Downloads\"
Dim strFName As String
Dim lastURL As String
Dim i As Long
Dim returnValue
i = InStrRev(strURL, "/")
lastURL = Mid(strURL, i + 1)
strFName = myDOWNDIR & lastURL
dwnStart:
'URLDownloadToFile API をコールする
DeleteUrlCacheEntry StrPtr(strURL)
returnValue = URLDownloadToFile(0, strURL, strFName, 0, 0)
If Dir(strFName) <> "" Then
MsgBox lastURL & ": Download Success"
Else
MsgBox "Failure!", vbCritical
End If
End Sub
''参考: https://www.ka-net.org/blog/?p=4855
No.2
- 回答日時:
こんにちは。
最初に、#1さんの書かれた内容は、こちらも是非見当してみたいと思いました。
「ファイルへのアドレスが分かる」ということが、実際ネックなのです。
実は、ひろんろんらん・さんの質問が出てから、最初に回答を差し上げた後、こちらも、ずっとその開発に関して自分なりに工夫や考えてみました。UIAutomationClientは知ってはいたけれども、「(ダウンロード)ファイルへのアドレスが分か」らないから、物理的?なクリック式になってしまうのではないでしょうか。(失礼な言い方に聞こえたらすみませんです)
前の話をきっかけに、こちらも体制を整えて、今、画像やら、動画やらプロテクトがかかっていないダウンロードできるものなら、ありとあらゆるものを試してみました。最近では、RTMPまで試してみましたが、それらはほとんど成功しています。
>オブジェクトの取得がうまくできていないため
正確に言えば、オブジェクトのURLだと思います。
それを、IE等のブラウザでアクセスしていたら、二重手間になってしまうので、WinHttp.WinHttpRequest で、ファイル名を探して、Win APIの URLDownloadToFile でダウンロードするようにしました。たぶん、こういうことは経験者は多くおられるとは思いますが、私自身はまったくの未経験でしたし、何も知らないままに暗中模索で行っていますが、とても興味があります。
P Capture などは、実際の運用では使わないでしょうけれども、ファイルの保存先から、新たなURLを想定することは可能になるのだと思っています。
もちろん、それは許される条件下がないと出来ませんが、ファイルのURLさえ分かれば、ほとんどは可能にするはずです。ちょっと話がずれているかもしれませんが。
ご返信遅れまして大変失礼いたしました。
只今新しい質問をしようと久しぶりに開いたら沢山の内容が記載されており驚いております。
まだきちんと眺めていないので別途確認をさせて下さい。
なお本件kumatti_1さんのご意見を採用し効果を確認できました。
本当にありがとうございました。
ちなみに、、新しい質問は、タイトル以下のとおりです。お時間有りましたらよろしくお願いいたします。
VBA:ホームページ内のデータテーブルスクロールバーの操作
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) シートをコピーする下記記述でダイアログを用いた記述がわかりません?( A = Dir(ThisWor 4 2022/08/22 12:26
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) outlook マクロが終了しません。 1 2022/09/02 11:14
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- 転職 転職時の雇用保険被保険者証の提出について 3 2022/03/25 14:32
- 写真・ビデオ Snowの写真保存について 1 2023/04/06 07:29
- JavaScript javaScriptで画面に値を入れるには 1 2022/08/14 12:27
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- その他(職業・資格) 一級建築施工管理技士 手当てについて 3 2022/08/03 16:34
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
VBA IE操作でダイアログ表示後、ファイルを開くボタンが押下できない
Visual Basic(VBA)
-
IEのダウンロード通知バーのVBA制御(保存他)
Visual Basic(VBA)
-
vbaでIEの名前を付けて保存(A)をしたい
Microsoft ASP
-
-
4
VBA IE ダウンロード ダイアログ制御(名前を付けて保存)
Visual Basic(VBA)
-
5
VBA IE通知バーの制御 バー内のボタン 開く/保存/キャンセルを押す
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
kmf着うたフルのDL方法(W32SA...
-
HTMLページが勝手にダウンロー...
-
ファイルをダウンロードすると...
-
【HTML】1クリックで複数ファイ...
-
java_run.batがダウンロードで...
-
Excelのマクロについて教えてく...
-
有料アダルトサイトで間違えて...
-
ダウンロードしたファイルが「...
-
MP4をダウンロードしたので...
-
Webサイトから、txtファイルを...
-
ホームページビルダー Ver9にWo...
-
URLDownloadToFile でダウンロ...
-
フラッシュについて・・
-
ダウンロード先指定プログラム
-
IEのダウンロード通知バーVBA制御
-
HTMLからフォルダを開きたい
-
リンク先からリンク元の、同じ...
-
textareaの一行の文字数制御
-
<a target="_top" href="***.ht...
-
HP作成!わからない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA URLDownloadToFileについて
-
Webサイトから、txtファイルを...
-
HTMLページが勝手にダウンロー...
-
【HTML】1クリックで複数ファイ...
-
java_run.batがダウンロードで...
-
URLDownloadToFile でダウンロ...
-
ファイルをダウンロードすると...
-
WEB上でPDF閲覧のみにしたいです。
-
Excelのマクロについて教えてく...
-
ZIPの拡張子のついたURLがダウ...
-
エクセルのファイルのダウンロ...
-
XMLファイルのダウンロード
-
VBA IE操作でダイアログ表示後...
-
リッチテキスト入力した内容(ti...
-
IE操作時、ファイルのダウンロ...
-
イラストレーターのaiファイル...
-
HTTP上にあるファイルの更新日時
-
ファイルのダウンロード時に、...
-
rdfファイルをブラウザで表示さ...
-
C#のWPFでmidiを再生する方法が...
おすすめ情報