WebBrowser 从文件加载和显示 URL

WebBrowser load and display URLs from file

我想在文本文件中加载 URL 的列表。我已使用 For Each 循环完成此操作,但我希望浏览器在转到下一个 URL 之前先完全加载页面。这是我的代码:

For Each url in File.ReadAllLines("urls.txt")
    Browser.Navigate(url)
Next

它没有显示任何内容。我尝试使用:

Do While Browser.ReadyState <> WebBrowserReadyState.Complete
    Application.DoEvents()
Loop

它显示页面,但第一行是唯一被加载的。

如果您想依次导航到每个 URL,最好将它们全部存储在 class 级别数组中并订阅 WebBrowser.DocumentCompleted event,然后跟踪其中 URL 您目前通过 class 级别 Integer 变量所处的索引。

当引发 DocumentCompleted 事件时,您只需递增整数变量并从数组的下一项加载 URL。

Public Class Form1
    Dim URLs As String()
    Dim UrlIndex As Integer = 0

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        URLs = File.ReadAllLines("urls.txt")
        WebBrowser1.Navigate(URLs(UrlIndex))
    End Sub

    Private Sub WebBrowser1_DocumentCompleted(sender As System.Object, e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
        UrlIndex += 1
        If UrlIndex >= URLs.Length Then
            UrlIndex = 0 'Go back to the beginning.
        End If

        WebBrowser1.Navigate(URLs(UrlIndex))
    End Sub
End Class

要为其添加延迟以使每个 URL 显示一小会儿,您可以使用 Timer (感谢 Werdna 提出该主题):

Private Sub WebBrowser1_DocumentCompleted(sender As System.Object, e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
    Timer1.Start()
End Sub

Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
    UrlIndex += 1
    If UrlIndex >= URLs.Length Then
        UrlIndex = 0 'Go back to the beginning.
    End If

    WebBrowser1.Navigate(URLs(UrlIndex))
    Timer1.Stop()
End Sub

只需设置计时器的 Interval property 即可更改网站的显示时间(以毫秒为单位)。