• 締切済み

WebBrowser でダイアログを自動処理したい

あるサイト…ぶっちゃけてしまうと、楽天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.html しかし、前述の通り、楽天RMSはID/PASSを2種類投入する認証ページを通過する必要があって、WebBrowser でそれを通過してからでないと、ファイルダウンロードのURLに辿り着けません。 WebBrowser でブラウザ上の処理を行った結果、出て来たダイアログボックスを処理する方法がありましたら、教えてください。

みんなの回答

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.3

回答1は取り消していないです。 > WebBrowser から WebClient へ認証が引き渡せるのか? WebBrowserが、Cookie認証チケットを受け取っているので WebClientに渡す必要があります。

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.2

formをsubmitしたときのブラウザの動きを再現できれば、Webサーバは希望のファイルを応答します。 URLは、<form action='~'>のURLです。 WebBrowser1.Document.Forms[0].GetAttribute("action") で取得する。 form以下の<input>も送信する必要があります。 WebBrowser1.Document.Forms[0].GetElementsByTagName("input") で取得して、 WebClient.UploadValues に渡す。

ky2605
質問者

お礼

ありがとうございます。 頂いた回答を元にgoogleって、 http://dobon.net/vb/dotnet/internet/webrequestpost.html#tips_controls のサイトからサンプルを得ました。 ----------- ※ここまでに、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 へ認証が引き渡せるのか? この場合、ファイルを受け取るのではなく、ダウンロードになると思うのですが、その辺りの処理が判らない状態です。

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.1
ky2605
質問者

お礼

ありがとうございます。 ただ、教えてもらった方法はクラスを使うため、VBAからVBに乗り換えて日が浅く、クラスを使った事がなく、参考URLの方法では解決できませんでした。 まだモジュール記載する所までしか知識がないのですが、cookieの引き渡しにはクラスが必須でしょうか? また、WebBrowserでurlを取得して ですが、 WebBrowser1.Url.ToString を使用するのだと思いますが、これを使用すると、ダウンロード前のsubmitのあるページのURLを拾ってしまいます。 そのページのhidden要素を連結してブラウザのURLにセットしたところ、ダイアログが出たので、この要素を拾い出す必要があるかと思いますが、これは、htmlを取得して分解するしかないでしょうか? ちなみに、そのURLを WebClient に渡して実行したところ、認証エラーページをダウンロードしてきました。

関連するQ&A

  • WebBrowserのダウンロードダイアログ処理

    はじめまして。 Excel VBAのWebBrowserを使用して自動ダウンロードを行いたいと考えております。 【内容】 WebBrowserにて対象のWebページを表示し、ボタンをクリック(自動)後にダウンロードダアログの表示まではできたのですが、処理がダイアログを表示させた時点で止まってしまい、DoEventsを入れても(FindWindowなどの後処理まで)進みません。 ダイアログをキャンセルすると処理は進みます。また、IE起動で同じダイアログを表示させ、マクロを動かすと正常にダイアログを認識できます。 WebBrowserではなくマクロでIE起動させれば良いかとは思いますが、疑問が残ったまま進めたくないこともあり、質問させていただきました。 ご存知の方、ご教授戴けないでしょうか。 【環境】 IE8、Excel2000、OS:XP SP3

  • VB6:WebBrowserでフォームの画像ボタンを押す

    VB6です。 WebBrowserを使って、ID,passを入れて、Login(submit)を押す。というのは良くありますが、 WebBrowser1.Document.login.submit のように 最近はボタンではなく画像であることが多くなってきました。 たとえばYahooのログイン画面。 https://login.yahoo.co.jp/config/login 私が良く使う本の検索画面 http://www.kosho.or.jp/servlet/bookselect.Kihon これらは、ボタンではなく画像をボタンにしています。 このボタンを押す方法はありませんでしょうか? よろしくお願いいたします。

  • WebBrowserの読み込み待ちの処理の仕方

    VB2005にてプログラムしております。 WebBrowser内にて表示したページでID、PASSを自動入力、ログインするというプログラムですが、 -------------------------------------------------------------     Dim IDCODE As String = TextBox1.Text Dim PASSCODE As String = TextBox2.Text '文字列で指定したURLに飛ぶ WebBrowser1.Navigate("https://XXXXXXXXX.ne.jp/") '表示終了まで待つ ??????    ‘WebBrowser1へID、PASS入力処理 ------------------------------------------------------------- 上記の ?????? 部分に表示待ちの処理をするコードを入れると思うのですが、 With WebBrowser1 Do While .IsBusy = True Loop Do While .ReadyState <> "complete" Loop End With を入力すると読み込み途中で止まってしまうみたいです。 なにかいい方法がありますか?

  • WebBrowserにてCSVを取得したい

    WebBrowserにてCSVを取得したい vb.net(VS2008) にて、WebBrowserを利用して指定のURLからCSVをダウンロードしたいのですが、ダウンロードするダイアログまたはエクセルがWebBrowser内に表示されてしまいます。 単純に、WebBrowserに表示して、DocumentCompleted 時にDocumentとして取得したいのです。 もしくは、ファイル名を予め指定してダウンロードでも問題ありません HttpWebRequest,WebClientによる取得は、 SSLクライアント認証などの公開キーに基づく認証方式が必要なサイトのため、できませんでした。 ダイアログ、エクセルが起動せずに取得出来る方法がありましたら、教えていただけないでしょうか? よろしくお願いします。

  • webbrowserについてボタンが見つからない

    現在 https://secure.avaonline.jp/member/ の自動ログインツールを作っているのですが、 WebBrowser1.Document.All.GetElementsByName("accountid")(0).InnerText = TextBox1.Text WebBrowser1.Document.All.GetElementsByName("passwd")(0).InnerText = TextBox2.Text によって、IDとPWの入力はできたのですが、ログインボタンと、ゲームスタートの ボタンどうしても見つかりません。 WebBrowser1.Document.All.GetElementsByName("ボタン名")(0).InvokeMember("submit") となど試してはみたのですが、 0' の値は 'index' に対して有効ではありません。'index' は 0 と -1 の間でなければなりません。 パラメータ名: index とエラーが出てしまいます。 上記のサイトはjavascriptなど使っていて見つけられなかったので、 具体的なボタンの名前やどのように記述していいの教えてください。 よろしくお願いします

  • WebBrowser内のフォームをsubmitする(VB2008)

    VB2008でWebBrowserコントロール内のsubmitボタンを以下のコードでクリックしようとしているのですが、 WebBrowser1.Document.Forms("フォームの名前").InvokeMember("submit") NullReferenceExceptionはハンドルされませんでした。 オブジェクト参照がオブジェクト インスタンスに設定されていません。 というエラーが出ます。 ボタンがフォームの中ではなく、tableの中に配置されているようで、idも指定されておらず、nameとvalueだけ指定されているのですが何か方法はないでしょうか。 どなたかお願いします。

  • VB2005のWebBrowserで”クリック”する

    VB2005のWebBrowserを使い、楽天ブログをランダムボタンを自動で押して、ペラペラめくっていきたいと思い、下記プログラムを組みました。 しかし、実際実行すると、プログラムが強制終了。「問題が発生したため、○○.exe(プログラム名) を終了します。 ご不便をおかけして申し訳ありません。」 となってしまいます。 原因、解決策、もしくは代案を教えていただきたいです。 よろしくお願いいたします。 プログラム '楽天ブログの自分のページにアクセス WebBrowser1.Navigate("http://plaza.rakuten.co.jp/○○○○○") 'ランダムボタン(右上のボタン)をクリック WebBrowser1.Document.GetElementsByTagName("a").Item("ランダム").InvokeMember("click")

  • VB2005で「ファイルのダウンロード」のダイアログをVBで操作したい。

    初歩的な質問だとは思いますが、どうか回答お願いします。 VB2005でwebからファイルを自動でダウンロードするアプリ を作ろうとしています。 http://www.hogehoge.com/hogehoge.jpg からのダウンロードの仕方は Dim wc As New System.Net.WebClient() wc.DownloadFile("http://www.hogehoge.com/hogehoge.jpg", "c:\hogehoge.gif") でうまくいくのですが、 http://www.hoge.com/code=xxxx/download のようなURLの場合は上記の方法ではうまくいきませんでした。 そこで webbrowser1.navigate("http://www.hoge.com/code=xxxx/download ") を実行後「ファイルのオダウンロード」のダイアログが 表示されるので、VBからそのダイアログを操作して ファイルを保存しようと思いましたが、やり方が全然思いつきませんでした(T△T) どのようにすればよいかご教授ください。 よろしくお願いしますm(_ _)m

  • WebBrowser内で、ブログにログインするには

    WebBrowserで、ブログのログイン画面を表示させ 自動でログインさせたいと思います。 URL → https://www.so-net.ne.jp/blog/login_sso?u=http%3A%2F%2Fblog.so-net.ne.jp%2F 分からないのは、「タブ」と「ログインボタン」のクリックです。 タブのクリックの仕方は、全く分かりませんでした。 ログインボタンを調べると <input id="loginformsubmit" type="submit" value="ログイン" name=""> となっており、 これを使って、vb.netでコーディングするには「name」が分からないと書けません。 With Me.WebBrowser1.Document.All Dim submit1 As HtmlElementCollection = .GetElementsByName("") submit1(0).InvokeMember("click") End With どのようにしたら、実現できるか 教えて下さい。 宜しくお願いします。

  • ダウンロードダイアログをVBAから操作するには?

    ExcelVBAで、IEを操作してます。 submitでダウンロードダイアログが表示される HPで、ダウンロードダイアログを操作したい(保存、ファイル名指定)のですがどういう方法がありますか? 対象オブジェクト.sendkeysも考えましたが 対象オブジェクトが何であるのかわかりません。 どうかよろしくお願いします。

専門家に質問してみよう