【解決方法あり】vb2005でHTMLソースの中の値を取得する方法とは?

このQ&Aのポイント
  • vb2005のWebBrowserを使用して、ホームページのHTMLソースの中から特定の値を取得する方法を教えてください。
  • WebBrowserのNavigateメソッドを使用して指定のURLを表示し、IsBusyとReadyStateを利用して読み込み完了まで待機します。
  • その後、HTMLソースの中から特定のタグの値をピンポイントで取得する方法を教えてください。
回答を見る
  • ベストアンサー

vb2005にてhtmlソースの中のある値を取得したい。

WebBrowser1.Navigate("http://www.yahoo.co.jp/") Do While (WebBrowser1.IsBusy Or WebBrowser1.ReadyState <> WebBrowserReadyState.Complete) My.Application.DoEvents() System.Threading.Thread.Sleep(50) Loop にてホームページを表示させたとき タグの中の値を取得したいんですが、 xmlみたいにピンポイントで取得するにはどのようにすればよろしいでしょうか?教えてください。

  • mixiho
  • お礼率41% (251/608)

質問者が選んだベストアンサー

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

お礼

ありがとうございます。 じっくりよんでみてだいたいわかりました。 プロパティとかメソッドの使い方がよくわからないので、こまっています。

関連するQ&A

  • WebBrowserについて

    Visual Studio 2008を使っています 途中で処理が停止しまい困っています デバックで一時停止をすると Do While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete System.Windows.Forms.Application.DoEvents() Loop この部分で作業が止まっています 何かいい方法はないでしょうか? ソースは下記の通りです WebBrowser1.Navigate(New Uri("http://※※※※※※※※※※※※)) Do While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete System.Windows.Forms.Application.DoEvents() Loop ______________________________ Threading.Thread.Sleep(1000)とか入れても止まってしまいます 秒数はいろいろ試しましたが駄目でした WebBrowser1.Navigate(New Uri("※※※※※※※※※※※※)) Threading.Thread.Sleep(1000) Do While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete System.Windows.Forms.Application.DoEvents() Loop

  • vb2005 webbrowserでリンクをクリックした後の表示待ちの方法

    VB2005を勉強中の者です。 WebBrowser1.Navigateを使ってwebページを開いた際は下記while文での表示待ちが機能するのですが、ページ表示後、さらにInvokeMemberを使って先のページにクリックで進んだ後では同一の表示待ち部分がうまく機能せずにそのまま次の処理へと進んでしまいいます。 どこに問題があるのか分からず困っております。どなたか助けていただけませんでしょうか? WebBrowser1.Navigate("https://yahoo.co.jp") '↓ここは機能します While WebBrowser1.IsBusy Or WebBrowser1.ReadyState <> WebBrowserReadyState.Complete Application.DoEvents() End While WebBrowser1.Document.GetElementsByTagName("a").Item(15).InvokeMember("click") '↓これが機能しなくて困っています! While WebBrowser1.IsBusy Or WebBrowser1.ReadyState <> WebBrowserReadyState.Complete Application.DoEvents() End While '↓目的 TextBox1.Text = WebBrowser1.Document.Body.InnerText

  • webbrowserの読込完了が反応しない

    何度も質問してすみません。 どうしても自力では解決できないことがありましたので質問させていただきます。 webbrowserでの読み込み後の処理についてなのですが、現在表示されているページ内のリンクを自動でクリックし、次のページにあるテキストボックス内にテキストを打ち込みたいのです。 While WebBrowser1.IsBusy Or WebBrowser1.ReadyState <> WebBrowserReadyState.Complete  Application.DoEvents() End While を置いているのですが、どうやらこれが機能せずにテキストボックスへの書き込みがうまくいきません。 試しに、上記の記載の後ろに msgbox("待ってみる") と記載してみると、前ページのリンクをクリックした瞬間、メッセージボックスが表示されます。 メッセージボックスのOKボタンをしばらく待って手動でOKをクリックするとテキストボックスへのテキストの書き込みも正常に行われます。 ほかには Do While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete System.Windows.Forms.Application.DoEvents() Loop や System.Threading.Thread.Sleep(1000) も試してみたのですが、sleepに関してはwebbrowserの読込自体が止まってしまいます。 何か良い方法はないのでしょうか? よろしくお願いいたします。

  • WebBrowserでHTML要素のclick処理

    WebBrowserで画面の自動遷移制御をしたいですが、うまくいかないです。 なぜかHTML要素のbuttonにInvokeMember("click")を呼び出す後の画面更新待ちができないようです。 ソースコードをご覧ください。 WebBrowser wb = new WebBrowser(); wb.Navigate("http://www.google.co.jp"); Application.DoEvents(); while (wb.ReadyState != WebBrowserReadyState.Complete || wb.IsBusy) { Console.WriteLine("waiting..."); System.Threading.Thread.Sleep(10); Application.DoEvents(); } Console.WriteLine(wb.DocumentTitle);   <----ここでGoogleが出力される //キーワードより検索する HtmlElement input = wb.Document.All.GetElementsByName("q")[0]; HtmlElement button = wb.Document.All.GetElementsByName("btnG")[0]; input.InnerText = "test"; button.InvokeMember("click"); Application.DoEvents(); while (wb.ReadyState != WebBrowserReadyState.Complete || wb.IsBusy) { Console.WriteLine("waiting..."); System.Threading.Thread.Sleep(10); Application.DoEvents(); } Console.WriteLine(wb.DocumentTitle); <----ここでもGoogleが出力される 2回目のタイトルは「test - Google 検索」がでるはずですが、 なぜか前のページのままです。 Documentの中身も前のページのままです。 解決方法お願いします。

  • WebBrowserにてsubmitの前にnavigateしてしまう

    いつもお世話になっております。 VB2005ユーザーです。 WebBrowser内の"submit"を押したあと、違うページに行きたいのですが、 "submit"を押す前に"Navigate"で指定しているページに行ってしまいます。 このようなコードを書いています。 With WebBrowser1 .Navigate("最初のURL") Do While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete System.Windows.Forms.Application.DoEvents() Loop .Document.Forms(0).InvokeMember("submit") Do While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete System.Windows.Forms.Application.DoEvents() Loop .Navigate("次の指定URL") Do While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete System.Windows.Forms.Application.DoEvents() Loop 「指定URL」は"submit"により新しいHTMLが生まれるので、その後の作業のためにどうしても"submit"を押したいのですが、上のようなコードですと先に「指定URL」に行ってしまいます。 "submit"をクリックせず、無視してしまうのです。 Navigate("次の指定URL")を外せばクリックしてくれるのですが・・・。 WebBrowserを完全に待機させる方法などが必要なのでしょうか? 宜しくご教授のほどお願い致します。

  • vb2005でwebbrowserに表示したテーブルタグの値を取得したい。

    <head> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis" /> <title>無題ドキュメント</title> </head> <body> <table width="450" border="1"> <tr> <th scope="col">&nbsp;</th> <th scope="col">&nbsp;</th> </tr> <tr> <th scope="row">&nbsp;</th> <td><table width="450" border="1"> <tr> <th scope="col">&nbsp;</th> <th scope="col">&nbsp;</th> </tr> <tr> <th scope="row">&nbsp;</th> <td>【xyz】</td> </tr> </table></td> </tr> </table> </body> </html> このようなhtml文書があったとして、 【xyz】この値を取得したいのですが WebBrowser1.Navigate("上記のhtml文書のURL") Do While (WebBrowser1.IsBusy Or WebBrowser1.ReadyState <> WebBrowserReadyState.Complete) My.Application.DoEvents() System.Threading.Thread.Sleep(50) Loop からどのようにコーディングすれば取得できるんでしょうか?できるだけ文字列操作をするのではなくて、 用意された2.0のクラス群を利用して取得したいんです。教えてください。お願いします。

  • vb2005で<td>から</td>までの値を取得したい。

    お世話になります。 vb2005で<td>から</td>までの中の値を取得したいと思っています。(例:<td>abc</td>だとabc) みなさんにお聞きして、コードを書いて エラーのでない形にできたのですが、 msgboxに値が表示されず困っています。 どこを訂正すれば動くようになるのでしょうか? 教えてください。お願いします。 Imports System.Web.UI.HtmlControls Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click WebBrowser1.Navigate("http://up.spawn.jp/file/up25449.html") Do While (WebBrowser1.IsBusy Or WebBrowser1.ReadyState <> WebBrowserReadyState.Complete) My.Application.DoEvents() System.Threading.Thread.Sleep(50) Loop Dim t As HTMLTable Dim c As HtmlTableCell Dim r As HtmlTableRow Dim lngCno As Long, lngTno As Long For Each t In WebBrowser1.Document.All.GetElementsByName("table") lngCno = 0 For Each r In t.Rows For Each c In r.Cells lngCno = lngCno + 1 MsgBox("【Cells(" & lngCno & ") in Tables(" & lngTno & ") innerHTML】") MsgBox(c.InnerHtml) Next c lngTno = lngTno + 1 Next r Next t End Sub End Class

  • 正しいWebBrowserの使い方(ループ判定)

    VB2008を使っています。WebBrowserのコンポーネントを使って ホームページにGET形式でパラメータを渡して画面のBODY部分を読み取る ものを作っているのですが、サーバーのレスポンスにもよりますが 1分間に20回で5分(100回程度)連続アクセスをするのですが、 以下のルーチンの場合何か不安を感じまして、 ネットでこれを使えばOKというものが無くて 確実に読み取る方法が知りたくて質問いたしました。 やはり、2つ目のイベントを用いる方が安心でしょうか? 正しいWebBrowserの使い方(ループ判定)をご存知の方教えてください。 '***** WebBrowser1.ReadyState ***** WebBrowser1.Navigate(URL) Do While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete Or WebBrowser1.IsBusy = True Application.DoEvents() Loop data = WebBrowser1.DocumentText '***** DocumentCompletedイベントまでループ ***** public wait_flag as Boolean wait_flag = True WebBrowser1.Navigate(URL) Do While (WebBrowser1.IsBusy = True) Or (wait_flag = True) Application.DoEvents() Loop data = WebBrowser1.DocumentText '---- イベント ----- Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted wait_flag = False End Sub

  • (VB)WebBrowserの値が更新されない

    VisualStudio2008の環境でFormにWebBrowserを配置し そこから以下の処理でHtml内の値を取得するプログラムを作成しています。 For Each he_TR As HtmlElement In he_TableChild.GetElementsByTagName("TD") If he_TR.Id = "AAAAA" Then TXT= he_TR.InnerText.ToString .TextBox1.Text = TXT End If Next これを1s間隔のタイマーで動かすと一定時間経過で(5分くらい?)値が取得できなくなります。 アタッチするとTimer処理は行われTextBoxに値を入れる箇所も通っています。 Html内のデータが更新されていない様に思えるのですが何か解決策があればご教示下さい。 下記が起動時のメソッドとなります。 Private Sub View() Me.WebBrowser1.Navigate("") '文字列で指定したURLに飛ぶ Me.WebBrowser1.Navigate("http://www.xxxxxxxxxxxxxxxx/") '完全に表示しきるまでWait Do Application.DoEvents() Loop Until WebBrowser1.ReadyState = WebBrowserReadyState.Complete And WebBrowser1.IsBusy = False 'Dim lngCno As Long, lngTno As Long Timer1.Interval = 1000 Timer1.Start() End Sub

  • C#でブラウザのタイムアウト処理

    Visual C# 2008 Expressで.NET Frameworkアプリケーションの勉強をしています。 今回、テキストファイルに書かれたURLリストを巡回するブラウザを作成しているのですが、サイトの読み込み完了に時間がかかり、途中で停止してしまう現象に悩まされています。 ソースは以下のようになっています。 string[] tempLine = File.ReadAllLines("list.txt", System.Text.Encoding.GetEncoding("Shift_JIS")); foreach (string temp in tempLine) { webBrowser1.Navigate(temp); //読み込みが完了するまで待つ while (webBrowser1.IsBusy == true || webBrowser1.ReadyState != WebBrowserReadyState.Complete) { //読み込み完了後、5秒まってから次に移動する System.Threading.Thread.Sleep(5000); System.Windows.Forms.Application.DoEvents(); } } アクセスして10秒以上たっても読み込みが完了しない場合、次のURLに飛ぶという処理を追加したいのですが、どのようにやったものか悩んでいます。 ご助言を頂ければと思います。よろしくお願いします。

専門家に質問してみよう