アプリ版:「スタンプのみでお礼する」機能のリリースについて

あるサイト…ぶっちゃけてしまうと、楽天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で質問しましょう!