0

谁能给我一些建议?我目前有一个正在使用的列表框,在列表框中有来自任何网站的图像列表。它们是通过这种方法从网站上抓取的

Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
    Dim PageElements As HtmlElementCollection = WebBrowser1.Document.GetElementsByTagName("img")
    For Each CurElement As HtmlElement In PageElements
        imagestxt.Items.Add(imagestxt.Text & CurElement.GetAttribute("src") & Environment.NewLine)
    Next
    Timer1.Enabled = True
End Sub

然后我使用图片控制方法来获取图像并显示它。

pic1.Image = New Bitmap(New MemoryStream(New WebClient().DownloadData(imagestxtimagestxt.SelectedItem.ToString))).SelectedItem.ToString)))

此方法从 HTML 中提取图像和标题。

Private Function StrHTML12() As Boolean
    Dim htmlDocument As HtmlDocument = WebBrowser1.Document
    ListBox1.Items.Clear()
    For Each element As HtmlElement In htmlDocument.All
        ListBox1.Items.Add(element.TagName)
        If element.TagName.ToUpper = "IMG" Then
            imgtags.Items.Add(element.OuterHtml.ToString)
        End If
        If element.TagName.ToUpper = "TITLE" Then
            titletags.Items.Add(element.OuterHtml.ToString)
            Timer1.Enabled = False
        End If
    Next
End Function

这是一种计算页面上有多少空alt=""或空的计数方法。img alt=''

基本上我想做的是;

有一个程序可以检查图像,查看alt=''或者img alt=''如果在网站上开发人员没有在 alt 标记中放置任何内容,我希望图像显示在图片框中,并且我希望 alt 标记在它旁边或下方它什么的。但我不知道怎么做。

counter = InStr(counter + 1, strHTML, "<img alt=''")
counter = InStr(counter + 1, strHTML, "alt=''")
counter = InStr(counter + 1, strHTML, "alt=""")

上面看起来真的很慢而且很乱。有更好的方法吗?

4

1 回答 1

0

我没有安装 VB,所以我无法测试代码。我也不熟悉 datagridview 组件,所以没有尝试将我的代码与其集成。

下面的代码应该让你知道title页面,并遍历所有img没有(或有空)的标签alt-text

HtmlElement.GetAttribute(sAttr)返回属性的值或空字符串。

Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As     WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
    Dim Title As String
    Dim ImSrc As String
    Dim PageElements As HtmlElementCollection = WebBrowser1.Document.GetElementsByTagName("img")
    // This line might need to be adjusted, see below
    Title = PageElements.GetElementsByTagName("title")(0).InnerText

    For Each CurElement As HtmlElement In PageElements
        If CurElement.GetAttribute("alt") = "" Then
             // CurElement does not have alt-text
             ImSrc = CurElement.GetAttribute("src") // This Image has no Alt Text
        Else
             // CurElement has alt-text
        End If
    Next
    Timer1.Enabled = True
End Sub

获取标题的行可能需要更改,因为我不确定如何访问集合。GetElementsByTagName您想要从函数返回的第一个(希望是唯一的)元素。

于 2013-02-26T20:50:20.263 回答