【问题标题】:ListBox with html element带有 html 元素的列表框
【发布时间】:2013-02-25 13:49:20
【问题描述】:

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

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=""")

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

【问题讨论】:

  • 你不能用HtmlElement.GetAttribute("alt")吗?你几乎可以像你的第一个代码示例一样做同样的事情
  • 这样做有什么好处?
  • 您可以循环遍历 Dom 节点以查看 alt 是否存在或具有空值,而不是使用字符串函数。可能需要澄清你的问题,因为我不确定你想要什么。
  • 请您描述一下您要达到的目标,最终结果。 (将其添加到问题的底部)
  • 最终目标是找出给定 HTML 文档中有多少个空 ALT 标记。需要找到这些标签,将图像的 src 显示在 datagridview 控件中并进行计数,以便可以通过将生成的报告给出反馈。

标签: html .net winforms listbox webbrowser-control


【解决方案1】:

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

下面的代码应该为您提供页面的title,并循环遍历所有没有(或为空)alt-textimg 标签

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 函数返回的第一个(希望是唯一的)元素。

【讨论】:

    猜你喜欢
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    • 2018-12-19
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    相关资源
    最近更新 更多