あるサイト…ぶっちゃけてしまうと、楽天RMS(楽天市場の出店者がアクセスできる、店舗情報の編集サイト)なのですが

Visual Basic 2010 でフォーム・アプリケーションを作り、自動アクセスして必要なファイルをダウンロードしてきたい というのがオーダーです。


楽天RMSにはID/PASSのセキュリティが2つかかっています。
アクセスできるブラウザの種類に制限があるようですが、WebBrowser はIEと見なされるのか、接続できました。

http://web.biz-prog.net/index.html

を参考に、ID/PASSをセットしたり、submitボタンを押すなどの処理を順番に行うよう記述したところ、概ね希望通りになったのですが、要望のsubmitボタンを押すコードを通過したところで

---------
ファイルのダウンロード
このタイルを開くか保存しますか?
---------

のダイアログがでました。

希望の動作としては、このダイアログの保存のボタンを「押した」処理を送り、保存場所を指定して、ファイルを自動ダウンロードしたいです。

ここから、Visual Basic 2010 WebBrowser ダイアログ 保存 など、Googleってみたのですが、希望のサンプルコードなどを見つける事ができませんでした。

見つけたページを総合すると、ファイルのダウンロードはWebClient.DownloadFileを使用するのが簡単な方法のようです

http://dobon.net/vb/dotnet/internet/downloadfile …

しかし、前述の通り、楽天RMSはID/PASSを2種類投入する認証ページを通過する必要があって、WebBrowser でそれを通過してからでないと、ファイルダウンロードのURLに辿り着けません。

WebBrowser でブラウザ上の処理を行った結果、出て来たダイアログボックスを処理する方法がありましたら、教えてください。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

回答1は取り消していないです。



> WebBrowser から WebClient へ認証が引き渡せるのか?

WebBrowserが、Cookie認証チケットを受け取っているので WebClientに渡す必要があります。
    • good
    • 0

formをsubmitしたときのブラウザの動きを再現できれば、Webサーバは希望のファイルを応答します。


URLは、<form action='~'>のURLです。

WebBrowser1.Document.Forms[0].GetAttribute("action")
で取得する。

form以下の<input>も送信する必要があります。

WebBrowser1.Document.Forms[0].GetElementsByTagName("input") で取得して、
WebClient.UploadValues に渡す。
    • good
    • 0
この回答へのお礼

ありがとうございます。

頂いた回答を元にgoogleって、

http://dobon.net/vb/dotnet/internet/webrequestpo …

のサイトからサンプルを得ました。

-----------
※ここまでに、WebBrowser1にURLを与え、ID/PASSを入力させて、サイト内を移動し、ダウンロード指定ページまで進んでいます。

Dim url As String = Form1.WebBrowser1.Document.Forms(0).GetAttribute("action")

Dim wc As New System.Net.WebClient
'NameValueCollectionの作成
Dim ps As New System.Collections.Specialized.NameValueCollection
'送信するデータ(フィールド名と値の組み合わせ)を追加

Dim elem As HtmlElement
For Each elem In Form1.WebBrowser1.Document.Forms(5).GetElementsByTagName("input")
If elem.Name = "" Then
Else
ps.Add(elem.Name, elem.GetAttribute("value"))
End If

Next

'データを送信し、また受信する
Dim resData As Byte() = wc.UploadValues(url, ps)
wc.Dispose()

'受信したデータを表示する
Dim resText As String = System.Text.Encoding.UTF8.GetString(resData)
Console.WriteLine(resText)

---------

これにより、URLとinputの要素は送られている様子です。
※Ps.Addに適用する前に、Debug.Printで確認してみました。


返ってきたresTextの中身は、認証エラーのHTMLなので、送っている要素としてはあっているのではないかと思います。

ただ、WebBrowser から WebClient へ認証が引き渡せるのか? この場合、ファイルを受け取るのではなく、ダウンロードになると思うのですが、その辺りの処理が判らない状態です。

お礼日時:2014/04/24 18:41

WebBrowserでurlを取得して、WebCientでダウンロード



User-Agentの偽装
http://www.atmarkit.co.jp/fdotnet/dotnettips/302 …

Cookieの偽装
http://bbs.wankuma.com/index.cgi?mode=al2&namber …
http://blogs.yahoo.co.jp/yss2216/14442912.html
    • good
    • 0
この回答へのお礼

ありがとうございます。

ただ、教えてもらった方法はクラスを使うため、VBAからVBに乗り換えて日が浅く、クラスを使った事がなく、参考URLの方法では解決できませんでした。

まだモジュール記載する所までしか知識がないのですが、cookieの引き渡しにはクラスが必須でしょうか?

また、WebBrowserでurlを取得して ですが、

WebBrowser1.Url.ToString

を使用するのだと思いますが、これを使用すると、ダウンロード前のsubmitのあるページのURLを拾ってしまいます。

そのページのhidden要素を連結してブラウザのURLにセットしたところ、ダイアログが出たので、この要素を拾い出す必要があるかと思いますが、これは、htmlを取得して分解するしかないでしょうか?

ちなみに、そのURLを WebClient に渡して実行したところ、認証エラーページをダウンロードしてきました。

お礼日時:2014/04/24 13:47

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qダウンロード支援フリーソフトについて

ダウンロード支援フリーソフトについて
色々なダウンロード支援フリーソフトを試しましたが私の設定が良くないのか私の思うようにダウンロード出来ません、おすすめのダウンロード支援フリーソフト・設定を教えてください。

用途としてはインターネットのページ上でサムネイル化されている画像を大きいサイズで保存したいのです、上記のとおり一通りフリーソフトを試しましたがサムネイルサイズの小さい画像しか保存できず困っています。

フリーソフト等を使ってサムネイル化された画像を元々のサイズで保存する方法はないのでしょうか?出来るのなら出来るフリーソフト・設定を教えて下さい。

質問内容が分かりにくく大変申し訳ありません。

Aベストアンサー

そのサムネイルは大きい画像へのリンクになっていますか?

小さいサムネイル画像しか持たない(リンクしていない)画像だったらどんなソフトを使っても小さな画像しか得られませんので

http://www.flashget.com/index_jp.htm

QVB6でコモンダイアログにバグ?がある

VB6でコモンダイアログにバグ?があるということ聞いたことがあるのですが、具体的な内容はわかりません。この問題は解決できるのでしょうか?
このコンポーネントの代わりになるものはあるのでしょうか?

VB6で作成して、.NETに移行しますが、このコンポーネントの使用は避けた方が良いでしょうか?

Aベストアンサー

コモンダイアログでカレントディレクトリが変わる、というのは
バグではなくて仕様でしょう。
カレントディレクトリを変えたくない場合は、
cdlOFNNoChangeDir
という定数を使います(VB6 の場合)。

App.Path が変わる、というのが本当ならそれはバグですけど、
とりあえずこんなコードで、コモンダイアログで別のディレクトリに
移動しても、App.Path は変わりませんでした。

MsgBox "before: " & vbCrLf & "App.Path=" & App.Path & vbCrLf & "CurDir$=" & CurDir$
'CommonDialog1.Flags = cdlOFNNoChangeDir
CommonDialog1.ShowOpen
MsgBox "after: " & vbCrLf & "App.Path=" & App.Path & vbCrLf & "CurDir$=" & CurDir$

「App.Path」と、「カレントディレクトリ」は、
ぜんぜん別物で、同じトコロを指していることが多いからといって
混同しないように注意するべきです。

コモンダイアログでカレントディレクトリが変わる、というのは
バグではなくて仕様でしょう。
カレントディレクトリを変えたくない場合は、
cdlOFNNoChangeDir
という定数を使います(VB6 の場合)。

App.Path が変わる、というのが本当ならそれはバグですけど、
とりあえずこんなコードで、コモンダイアログで別のディレクトリに
移動しても、App.Path は変わりませんでした。

MsgBox "before: " & vbCrLf & "App.Path=" & App.Path & vbCrLf & "CurDir$=" & CurDir$
'CommonDialog1.Flags = cdlOF...続きを読む

Qフリーソフトをダウンロード,なのに有償版のアイコンがある…

お教えください。

ラスター・ベクター変換で
http://www.softsoft.net/wintopo/dl-wintopo.htm
という英国のWinTopo Freeware 1.7というフリーソフトをダウンロードしました。

ですが,インストールを終えてみるとWinTopo Freeware 1.7のフリーソフトとWinTopo Professionalの有償版のアイコンがうまれているのです。

どこかで間違った手続きをしたのでしょうか?

特に変わったこともなくダウンロードして,インストールをしました。 

そして,サイトがすべて英語なのでわかりづらくて困っています。

フリーソフトのみをダウンロードしたつもりなのにWinTopo Freeware 1.7のフリーソフトとWinTopo Professionalの有償版のアイコンがあることや,間違いダウンロードをしてしまったかもしれないということについて尋ねたくてもどうしてよいかわかりません。

これは請求されるのでしょうか?

もし,ダウンロードミスをしていた場合,これは間違 いダウンロードだとしてダウンロードを返上,撤回す るのはどうすればよいでしょうか?

お教えください。

ラスター・ベクター変換で
http://www.softsoft.net/wintopo/dl-wintopo.htm
という英国のWinTopo Freeware 1.7というフリーソフトをダウンロードしました。

ですが,インストールを終えてみるとWinTopo Freeware 1.7のフリーソフトとWinTopo Professionalの有償版のアイコンがうまれているのです。

どこかで間違った手続きをしたのでしょうか?

特に変わったこともなくダウンロードして,インストールをしました。 

そして,サイトがすべて英語なのでわかりづらくて困ってい...続きを読む

Aベストアンサー

正常です。

私もインストールしたことがありますが、たしかその有償版は期間限定だか機能限定だかの試用版のはずです。
一緒にインストールされる旨どこかに書かれていたと思います。

QVBAを使ってIEのあるWEBサイトに自動ログインし、フォームに入力する処理を考えています。しかし、

VBAを使ってIEのあるWEBサイトに自動ログインし、フォームに入力する処理を考えています。しかし、その処理の中で下記の「発注入力フォーム」ボタンをクリックする処理方法がわかりません。
どなたかアドバイスをお願いします。

DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>メインメニュー :: WEB発注メールフォーム</title>
<link href="css/menu.css" rel="stylesheet" type="text/css" />
</head>

<body>

<div id="wrapper">

<div id="user_name">
<p>
ようこそ
</p>
</div>

<div id="menu_area">
<div id="gnavi">
<ol>
<li id="gnavi1"><a href="./tutorial/index.html">チュートリアル</a></li>
<li id="gnavi2"><a href="./?mode=order">発注入力フォーム</a></li>
<!-- <li id="gnavi3"><a href="#">修正依頼フォーム</a></li> -->
<li id="gnavi4"><a href="./tutorial/about.html">発注・使用に関して</a></li>
<li id="gnavi5"><a href="./?mode=contact">総合お問合せ</a></li>
<li id="logout"><a href="./?mode=logout">ログアウト</a></li>
</ol>
<p style="font-weight:bold;color:white;font-size:13px;">
似顔絵・写真撮影・交通案内図のサービスを<br />
ご要望の際は、一度お問い合せ下さい。
</p>
</div>
</div>
</div>

</body>
</html>

VBAを使ってIEのあるWEBサイトに自動ログインし、フォームに入力する処理を考えています。しかし、その処理の中で下記の「発注入力フォーム」ボタンをクリックする処理方法がわかりません。
どなたかアドバイスをお願いします。

DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html;...続きを読む

Aベストアンサー

すごい勘違いがあるような
下は、fc2 ブログの新投稿のロジック
クリックっても
If sel.value = "ログイン" Then
sel.Click
End If
だけなんだけど・・・

Set netobjIE = CreateObject("internetExplorer.application")
url = "http://admin.blog.fc2.com/ *****/new"

With netobjIE
.navigate url
.Visible = True
Do While .Busy = True
DoEvents
  Call Sleep(200)
If .Busy = False Then
Exit Do
End If
Loop
Do While .document.readyState <> "complete"
DoEvents
   Call Sleep(200)
If .document.readyState = "complete" Then
Exit Do
End If
Loop
’ お約束の待ち処理
Dim in_str As String
Dim doc As HTMLDocument
Set doc = netobjIE.document
Dim sel As IHTMLInputElement

in_str = "ログイン FC2 - 無料ホームページ"
'Debug.Print InStr(IE.document.Title, in_str)
If InStr(netobjIE.document.Title, in_str) > 0 Then

Set sel = doc.getElementsByName("id")(0)
sel.value = "*****@qg8.so-net.ne.jp"

Set sel = doc.getElementsByName("pass")(0)
sel.value = "*******"

Set sel = doc.getElementsByName("image")(0)

If sel.value = "ログイン" Then
sel.Click
End If
’これは・・ログイン しかないからだけど

すごい勘違いがあるような
下は、fc2 ブログの新投稿のロジック
クリックっても
If sel.value = "ログイン" Then
sel.Click
End If
だけなんだけど・・・

Set netobjIE = CreateObject("internetExplorer.application")
url = "http://admin.blog.fc2.com/ *****/new"

With netobjIE
.navigate url
.Visible = True
Do While .Busy = True
DoEvents
  Call Sleep(200)
If .Busy = False Then
Exit Do
End If
Loop
Do While .document....続きを読む

Q「着もと」というフリーソフトのダウンロードサイトが開けなく、ソフトがダ

「着もと」というフリーソフトのダウンロードサイトが開けなく、ソフトがダウンロードできません。
着もとのように着信音設定を可能にするフリーソフトがあれば教えていただけないでしょうか?

Aベストアンサー

http://www.vector.co.jp/soft/dl/winnt/art/se460732.html
ここからどうぞ

Qログイン処理を自動で行い、目的のWEBページの内容を取得したい

ログイン処理を自動で行い、目的のWEBページの内容を取得したい

http://dobon.net/vb/dotnet/internet/webrequest.html

上記のサイトを参考にWEBページの取得には成功したのですが、
IDやパスワードを入力する必要のあるページはどのようにしたらよいでしょうか?

Aベストアンサー

#回答が付かないようですので、ご参考までに。。。

>上記のサイトを参考にWEBページの取得には成功した
 私は、[VB.NET] も [C#] も存じません。
 ただ、
>ログイン処理を自動で行い、目的のWEBページの内容を取得
するというようなことは、WSH や VBA では簡単にできることですので、[VB.NET] や [C#] でもさほど難しいことではなかろうかなと存じまして、ちょっとググってみました。

 で、結果ですが、下記はご参考にならないでしょうか?
 お示しの URL は [■プログラミング] - [.NET Tips] - [インターネット] - [WebRequest、WebResponseクラスを使ってファイルをダウンロードし表示する] の ページ ですが、下記は、同じ サイト の [■プログラミング] - [.NET Tips] - [インターネット] - [認証が必要なページをダウンロードする] です。
http://dobon.net/vb/dotnet/internet/usecredentials.html

Qベクターのフリーソフトがうまくダウンロードできない

ベクターのフリーソフトを手順どうりダウンロードして 解凍ソフトを重ねて
解凍してみると何故か全て、エキサイト壁紙マネジャーの絵になります。
どんな、フリーソフトをダウンロードしても全部 壁紙マネジャーになるのです
なぜでしょうか?教えてください

Aベストアンサー

壁紙マネジャーを終了してから ダウンロードしてみては いかがでしょうか?
そのソフトが 余計なことをしているのかもしれません。

QVBA Saveダイアログ

アクセス+VBAです

アクセスのデータをCVSファイルとかに落としたい時などフォルダ名、ファイル名を指定するダイアログってないでしょうか?

Aベストアンサー

APIのGetSaveFileNameを使用すれば出来ます。
ここに書くと長くなるのでGetSaveFileNameで検索してみてください。

Qベクターのあるフリーソフトのダウンロード法

訳があって デザインした文字をTシャツに昇華プリント加工する必要に迫られ しかも「立体文字」を
デザインする必要に迫られ ウェブサイトをさまよってると ベクターのフリーソフト「もこもこ」なるサイトに出会いました。
http://www.vector.co.jp/vpack/browse/pickup/pw5/pw005196.html
フリーソフトと分かって 喜びいさんでダウンロード
しようとして うまくダウンロード出来ません。
ウェブ上の「ダウンロード」の項をクリックしても
うまくダウンロード出来ません。
実は ベクターのフリーソフトをダウンロードした
経験ゼロです。ひょっとして 事前の会員登録制?
なのでしょうか。
どなたか 御教示 お待ちしています。
PS。「ラーサプラス」なる解凍ソフトは
   インストール済みです。

Aベストアンサー

最近「Vアップ通知」なるサービスが開始され、ダウンロードを開始する前に、そのサービスの案内ページが挿入されるようになりました。
このページで「登録するとバージョンアップの連絡…」などの文面があるのでそれで迷われたのでしょうか?
案内ページの下にある「いまは登録しない」ボタンを押すととりあえずダウンロードが開始されますよ。

自分も変更直後に「登録が必要になったのか?」と勘違いし少しハマりました(^^;

Qダイアログにプレビュー表示

ダイアログに画像ファイルのプレビューを表示したいのです。
標準のダイアログではできないのでしょうか?
プレビュー機能を持ったダイアログが市販されていますが・・・
宜しくお願いします。

Aベストアンサー

訂正です。。。
※誤り
>        'ダミーに読み込む
>        On Error Resume Next
>        dmyPicture.Picture = LoadPicture(wkStr)
>        On Error GoTo 0
>        
>        '正常に読まれたか?
>        If dmyPicture.Picture = 0 Then
>          '異常読み込みなので、ファイルフルパス名記憶の破棄
>          dmyPicture.Tag = ""
>          GoTo PGMEND
>        Else
>          '正常に読み込まれたので、ファイルフルパス名を記憶しておく
>          dmyPicture.Tag = wkStr
>        End If


以上の部分を以下のように変更してください。
※正しい
        'ダミーに読み込む
        On Error Resume Next
        Err.Clear
        dmyPicture.Picture = LoadPicture(wkStr)
        
        '正常に読まれたか?
        If Err.Number = 0& Then
          '正常に読み込まれたので、ファイルフルパス名を記憶しておく
          dmyPicture.Tag = wkStr
        Else
          '異常読み込みなので、ファイルフルパス名記憶の破棄
          dmyPicture.Tag = ""
          GoTo PGMEND
        End If
        On Error GoTo 0

訂正です。。。
※誤り
>        'ダミーに読み込む
>        On Error Resume Next
>        dmyPicture.Picture = LoadPicture(wkStr)
>        On Error GoTo 0
>        
>        '正常に読まれたか?
>        If dmyPicture.Picture = 0 Then
>          '異常読み込みなので、ファイルフルパス名記憶の破棄
>          dmyPicture.Tag = ""
>          GoTo PGMEND
>        Else
>    ...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報