あるサイト…ぶっちゃけてしまうと、楽天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 でブラウザ上の処理を行った結果、出て来たダイアログボックスを処理する方法がありましたら、教えてください。

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が見つからない時は、教えて!gooで質問しましょう!

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

今、見られている記事はコレ!

  • 好きだけどケンカばかり……そんな彼との結婚は?

    やたらとケンカが多いカップルというのはいる。それでも腐れ縁なのか長く交際し、いざ結婚しようと決めたときに、ふと思い悩む。こんなにケンカが多いのに、結婚して大丈夫? と。今回は「教えて!goo」に寄せられ...

  • ポンコツな日々:第125話「食べてもOK」

    日々のちょっとしたヘンな出来事を、1話完結形式の4コマで綴っていきます。時にするどく、時にやんわり、ありそうで無さそうな日常の1コマを切り取ってお届けします。

  • “罵声大会”に怒り心頭?名指しで苦情も……駅員泣かせの鉄道ファン

    時として人は趣味に没頭してしまうと、周囲に迷惑をかけてしまいがち。それが公共の場ならばなおさらである。「教えて!goo」に「何で鉄道ファンはマナーの悪い人が多いのでしょうか?」との質問を見つけた。鉄道愛...

  • たまランチ:第102話「ネコ好き」

    外ランチを愛してやまない元気な女子社員・たまちゃん(26)。オシャレなお店より「安くておいしい」お店が大好き! そんな女子力低めなたまちゃんの、色気より食い気な日々をつづります。

  • エルフ田さん:第125話「洗濯干しの『コツ』」

    エルフ(ファンタジーとかに出てくる長寿の種族)の「エルフ田」と、ただの人間である女子社員2人による日常ギャグ。エルフならではのズレたツッコミでバシバシ人間界の話題を斬っていきます。

おしトピ編集部からのゆる~い質問を出題中

お題をもっとみる

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


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

このカテゴリの人気Q&Aランキング

おすすめ情報

カテゴリ