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

このQ&Aのポイント
  • VisualStudio2008の環境でFormにWebBrowserを配置し、Html内の値を取得するプログラムを作成しています。しかし、1秒ごとに動かすと一定時間経過後に値が取得できなくなります。
  • Timer処理は正常に行われ、TextBoxに値を入れる箇所も通っています。ただ、Html内のデータが更新されていないように思えます。
  • 解決策があればご教示ください。
回答を見る
  • ベストアンサー

(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

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

  • ベストアンサー
回答No.1

こんばんは WebBrowser1_DocumentCompletedを使うと完全に要素が読み込まれたときに発生しますので、簡単に装着できます、 また、For Eachのときにあまり高速にするとミスっちゃいますのでFor Eachのなかでタイマーを仕掛けてください。 サンプルです。 Public Class Form1 Private Sub f() Handles MyBase.Shown WebBrowser1.Navigate("http://kagoturikentarou.dousetsu.com/axWindowsMediaPlayer4.html") End Sub Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted If sender.url.ToString <> e.Url.ToString Then Exit Sub End If For Each he_TR As HtmlElement In WebBrowser1.Document.GetElementsByTagName("td") If he_TR.GetAttribute("align") = "center" Then Threading.Thread.Sleep(1000) Application.DoEvents() TextBox1.Text = he_TR.InnerText End If Next End Sub End Class

その他の回答 (1)

回答No.2

おはようございます すいません、訂正です。 InnerTextをTextBoxで表示すると人間にはサイト内の最後の値しか見えませんので、ListBoxに表示して見えるかたちのサンプルに変更しました。 サンプルでは、違うURLを2秒間隔で交互に読み込んでいます。 <td>にidが設定されていませんので、<td align="center">のalign="center"をIf文に表記しました(本当は必要ありませんが) WebBrowserにhtmlが読み込まれるときに複数のURLが出てき、余分なURLを排除するため、1秒間隔で読み込むとかなり厳しいです。 サンプルでは2秒間隔にしました。 >一定時間経過で(5分くらい?)値が取得できなくなります。 この現象はWebBrowser1.Navigate(~~~~)で一度ログインしたり、一度表示したので、2回目からは省略でhtmlの要素を取得しようとするとなっちゃいますが、それと同じ現象かな~ サンプルです。 Public Class Form1 Private Sub f() Handles MyBase.Shown '一秒ごとにTimer1イベントを起動する Timer1.Enabled = True Timer1.Interval = 2000 End Sub Dim i As Integer 'カウンター Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick 'カウンターの値によって WebBrowser1のURLを変更する If i = 0 Then WebBrowser1.Navigate("http://kagoturikentarou.dousetsu.com/loginstart.html") i += 1 ElseIf i = 1 Then WebBrowser1.Navigate("http://kagoturikentarou.dousetsu.com/axWindowsMediaPlayer4.html") i = 0 End If End Sub 'htmlの要素が完全に読み込まれたら発生するイベント Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted '一度ListBox1を空にする ListBox1.Items.Clear() '目的のURLと違うURLが読み込まれたらプロシージャを抜ける If sender.url.ToString <> e.Url.ToString Then Exit Sub End If '<td>属性がalign = "center"の値をListBox1に表示 For Each he_TR As HtmlElement In WebBrowser1.Document.GetElementsByTagName("td") If he_TR.GetAttribute("align") = "center" Then ListBox1.Items.Add(he_TR.InnerText) End If Next End Sub End Class

関連するQ&A

  • WebBrowserでHtmlを取得

    WebBrowserでHtmlを取得する方法をおしえてください フォーム上に、WebBrowser1、TextBox1、Button1を配置しています。 TextBox1にHtmlを表示し、Button1は、WebBrowser1に表示している WEBページを更新します。 やりたい事  (1)フォームを開いた時に、URLで指定したWEBページを表示させ   TextBox1にHtmlを表示させる。  (2)Button1をクリックした時、表示しているWEBページを更新する。   更新後のHtmlをTextBox1に表示させる。  (3)TextBox1の表示が完了したらHtmlを処理する。(未着手) 現在、(1)は動作するのですが、(2)が動作しません(TextBox1のHtmlが更新されない) Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load WebBrowser1.Navigate(オッズURL):webcompflag = False Do While (webcompflag = False) System.Windows.Forms.Application.DoEvents() System.Threading.Thread.Sleep(10) Loop TextBox1.Text = WebBrowser1.Document.Body.InnerHtml End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click TextBox1.Text = "" If Not WebBrowser1.Url.Equals("about:blank") Then WebBrowser1.Refresh() : webcompflag = False Do While (webcompflag = False) System.Windows.Forms.Application.DoEvents() System.Threading.Thread.Sleep(10) Loop TextBox1.Text = WebBrowser1.Document.Body.InnerHtml End Sub 何がいけないのか分かりません よろしくお願いします。

  • WebBrowserについて

    VB2005で、WebBrowserを使おうとしたところ次のような問題が発生しました。 フォームに、WebBrowserを貼り付けてボタンをクリックしたところsubの途中でStopさせるとWebBrowserに表示されません。どうしてでしょうか?教えてください。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click WebBrowser1.Navigate("http://www.goo.ne.jp/") End Sub の状態だと表示されますが、 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click WebBrowser1.Navigate("http://www.goo.ne.jp/")     Stop End Sub で止めると表示されません。 教えていただけないでしょうか?宜しくお願い致します。

  • 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 WEBページ更新時に音を出し

    WebBrowser WEBページ更新時に音を出したくない アクセスのフォームにWebBrowserコントロールを置いて、 Private Sub Form_Open(Cancel As Integer) Me.WebBrowser0.Navigate "http://finance.yahoo.co.jp/" End Sub としました。 コマンドボタンも設置して、 Private Sub コマンド1_Click() Me.WebBrowser0.Refresh End Sub としました。 フォームを開いたり、コマンドボタンを押したらサイトが表示されますがその際、音が鳴ります。 「シュッシュ」と言う感じです。 その音を出さない方法なんてありますか? その音だけ出したくないので、ミュートにはしたくないです。 でもなぜかhttp://finance.yahoo.co.jp/だと音は鳴るけど http://oshiete.goo.ne.jp/にすると音は鳴りません。 OS:wi7、オフィス2007です。 ご回答よろしくお願いします。

  • WebBrowserコントロール(続き)(続き)

    QNo.746387で下記のコードを教えてもらいました。 これでwebbrowserに表示されました。 Private Sub Command1_Click() Open "temp.html" For Output As #1 Print #1, "<html><body>あいうえお</body></html>" Close #1 WebBrowser1.Navigate2 CurDir + "\temp.html" End Sub 保存場所を変えて Private Sub Command1_Click() Open "c:\temp.html" For Output As #1 Print #1, "<html><body>あいうえお</body></html>" Close #1 WebBrowser1.Navigate2 CurDir + "c:\temp.html" End Sub とやったのですが、保存はされますが、表示がされません。 WebBrowser1.Navigate2 CurDir + "c:\temp.html" が問題のようです。 どうしたらよいのでしょうか?

  • 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にて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みたいにピンポイントで取得するにはどのようにすればよろしいでしょうか?教えてください。

  • WebBrowserでgoogle検索するには?

    WebBrowserを使ってgoogle検索をVBで作ったブラウザ上で行いたいです。 具体的には、 「ComboBoxで選択した値」と「TextBoxで書き込んだキーワード」を &検索したいのですが Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted WebBrowser1.Document.All.GetElementsByName("q")(0).InnerText = TextBox1.Text WebBrowser1.Document.All.GetElementsByName("q")(0).InnerText = ComboBox1.SelectedItem WebBrowser1.Document.Forms(0).InvokeMember("submit") End Sub では、&検索ができません。常にコンボボックスで選択されたものだけが 検索され、しかも無限に検索をします。 対処法を教えていただけないでしょうか?

  • VBでデバックするとエラーになる。

    VBでデバックすると下のようなエラーがでます ArgumentNullExceptionはハンドルされませんでした。 値を Null にすることはできません。 パラメーター名: activationContext VBを初めて日が浅いのでヘルプを読んでも意味が理解できませんでした。 なので、易しく回答してもらえると嬉しいです コードは下です Public Class Form1 'TextBox2に入力したURLをWebBrowser1で表示する Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click WebBrowser1.Navigate(TextBox2.Text) End Sub 'ブラウザ→戻るでWebBrowser1を処理する Private Sub 戻るToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 戻るToolStripMenuItem.Click WebBrowser1.GoBack() End Sub 'ブラウザ→進むでWebBrowser1を処理する Private Sub 進むToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 進むToolStripMenuItem.Click WebBrowser1.GoForward() End Sub 'ブラウザ→テキストボックスにURLを入力した時の処理 Private Sub ToolStripTextBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripTextBox1.Click WebBrowser1.Navigate(ToolStripTextBox1.Text) End Sub 'TextPageのタブをクリックした時のイベント Private Sub TabPage1_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles TabPage1.Enter TextBox2.Visible = False Button1.Visible = False ブラウザToolStripMenuItem.Enabled = False 書式ToolStripMenuItem.Enabled = True ToolStripMenuItem1.Enabled = True End Sub 'BrowserPageのタブをクリックした時のイベント Private Sub TabPage2_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles TabPage2.Enter TextBox2.Visible = True Button1.Visible = True ブラウザToolStripMenuItem.Enabled = True 書式ToolStripMenuItem.Enabled = False ToolStripMenuItem1.Enabled = False End Sub Private Sub 新規ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 新規ToolStripMenuItem.Click TextBox1.Text = ("") End Sub Private Sub 開くToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 開くToolStripMenuItem.Click Dim selectButton As DialogResult Dim filename As String selectButton = OpenFileDialog1.ShowDialog() filename = OpenFileDialog1.FileName If selectButton = DialogResult.OK Then Try TextBox1.Text = _ My.Computer.FileSystem.ReadAllText(filename, System.Text.Encoding.Default) Me.Text = "Visual Text" & filename Catch ex As Exception End Try End If End Sub Private Sub 保存ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 保存ToolStripMenuItem.Click Dim selectButton As DialogResult Dim filename As String selectButton = SaveFileDialog1.ShowDialog() filename = SaveFileDialog1.FileName If selectButton = DialogResult.OK Then Try My.Computer.FileSystem.WriteAllText(filename, TextBox1.Text, False, System.Text.Encoding.Default) Me.Text = "Visual Text" & filename Catch ex As Exception End Try End If End Sub Private Sub フォントToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles フォントToolStripMenuItem.Click Dim fd As New FontDialog() fd.Font = TextBox1.Font fd.Color = TextBox1.ForeColor fd.MaxSize = 19 fd.MinSize = 8 fd.FontMustExist = True fd.AllowVerticalFonts = False fd.ShowColor = True fd.ShowEffects = True fd.FixedPitchOnly = False fd.AllowVectorFonts = True If fd.ShowDialog() <> DialogResult.Cancel Then 'TextBox1のフォントと色を変える TextBox1.Font = fd.Font TextBox1.ForeColor = fd.Color End If End Sub End Class

  • TextBoxコントロールを引数として渡すには?

    Public Sub MPlus(txt as TextBox) End Sub という関数があって、この関数に引数としてTextBoxコントロールを渡したいのですが、 Call MPlus(txt_MHantei)や、Call MPlus(Me.txt_MHantei)では、 TextBox.Textの値が引数として渡ってしまい型が違うというエラーが出てしまいます。 どうしたらよいのでしょうか?教えてください。

専門家に質問してみよう