none
VB2010 的網頁元素 GetAttribute 該如何取到沒有名稱的值 RRS feed

  • 问题

  • Protected Friend WebBrowserRead As New WebBrowser Sub Loading() Do Until WebBrowserRead.ReadyState = WebBrowserReadyState.Complete Application.DoEvents() Loop End Sub Private QQ As String = Nothing Private Sub GetData() ListBoxTitle.Items.Clear() For Each i As HtmlElement In WebBrowserRead.Document.All If i.TagName = "A" Then QQ = i.GetAttribute("title") End If If Not QQ = Nothing Then ListBoxTitle.Items.Add(QQ) QQ = Nothing End If Next End Sub

    例如以下這個"看著金太權"他並不像 網址 有個href的名稱,而是在網址的後面

    還有這一張"維基百科,字遊的百科全書"他是在下面該如何去取值?



    • 已编辑 披薩 2012年3月20日 7:07
    2012年3月20日 7:05

答案

  • 1)首先你不必用循环方法,请删除loading方法;改用WebBrowser的DocumentCompleted事件(该事件在整个html全部加载完毕之后才自动运行,在这个事件中调用你的方法)。

    2)获取标签内部嵌套的值你应该用InnerText属性,而不是GetAttribute,参考:

    Private QQ As String = Nothing
    Private Sub GetData()
         ListBoxTitle.Items.Clear()
         For Each i As HtmlElement In WebBrowserRead.Document.All
              If i.TagName = "A" Then
                   QQ = i.InnerText
              End If
              If Not QQ = Nothing Then
                    ListBoxTitle.Items.Add(QQ)
                    QQ = Nothing
              End If
         Next
    End Sub

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处


    2012年3月20日 7:43
    版主
  • 建议你先把数据不要直接存放到ListBox,而是放到List(Of String)中,然后使用索引去指定要添加具体哪一行数据到ListBox中去。示例代码如下:

    Private QQ As String = Nothing
    Private litems As List(Of String) = New List(Of String)
    Private Sub GetData()
         ListBoxTitle.Items.Clear()
         For Each i As HtmlElement In WebBrowserRead.Document.All
              If i.TagName = "A" Then
                   QQ = i.InnerText
              End If
              If Not QQ = Nothing Then
                    litems.Add(QQ)
                    QQ = Nothing
              End If
         Next
    End Sub
    
    '倒数7~5
    For i As Integer=6 To 4 Step -1
      ListBox1.Items.Add(litems(i).ToString())
    Next
    
    '每三行读一行参考
    For j As Integer=0 To 你的List实体.Count-1 Step 3
      ListBox.Items.Add(litems(j).ToString())
    Next

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    • 已标记为答案 披薩 2012年3月20日 9:39
    2012年3月20日 8:54
    版主
  • 那個謝謝你幫忙

    For i As Integer = 70 To 205 'Step -1
          i += 3
          ListBox1.Items.Add(litems(i).ToString())
    Next

    每3次讀一行我搞定了


    • 已标记为答案 披薩 2012年3月20日 9:39
    • 已编辑 披薩 2012年3月20日 9:40
    2012年3月20日 9:38

全部回复

  • 可以用InnerHtml取得


    2012年3月20日 7:30
  • 程式碼該怎用可以列個範例嗎?
    2012年3月20日 7:33
  • 1)首先你不必用循环方法,请删除loading方法;改用WebBrowser的DocumentCompleted事件(该事件在整个html全部加载完毕之后才自动运行,在这个事件中调用你的方法)。

    2)获取标签内部嵌套的值你应该用InnerText属性,而不是GetAttribute,参考:

    Private QQ As String = Nothing
    Private Sub GetData()
         ListBoxTitle.Items.Clear()
         For Each i As HtmlElement In WebBrowserRead.Document.All
              If i.TagName = "A" Then
                   QQ = i.InnerText
              End If
              If Not QQ = Nothing Then
                    ListBoxTitle.Items.Add(QQ)
                    QQ = Nothing
              End If
         Next
    End Sub

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处


    2012年3月20日 7:43
    版主
  • 謝謝,我用了可以

    但是非常亂,有沒有什麼辦法可以從第7開始讀,然後讀到倒數第5個

    還有下面這張"每三個就一個長的字串也是我要的,請問該怎麼跳過每個三行讀一行,再跳過三行讀一行?

    • 已编辑 披薩 2012年3月20日 8:11
    2012年3月20日 8:04
  • 建议你先把数据不要直接存放到ListBox,而是放到List(Of String)中,然后使用索引去指定要添加具体哪一行数据到ListBox中去。示例代码如下:

    Private QQ As String = Nothing
    Private litems As List(Of String) = New List(Of String)
    Private Sub GetData()
         ListBoxTitle.Items.Clear()
         For Each i As HtmlElement In WebBrowserRead.Document.All
              If i.TagName = "A" Then
                   QQ = i.InnerText
              End If
              If Not QQ = Nothing Then
                    litems.Add(QQ)
                    QQ = Nothing
              End If
         Next
    End Sub
    
    '倒数7~5
    For i As Integer=6 To 4 Step -1
      ListBox1.Items.Add(litems(i).ToString())
    Next
    
    '每三行读一行参考
    For j As Integer=0 To 你的List实体.Count-1 Step 3
      ListBox.Items.Add(litems(j).ToString())
    Next

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    • 已标记为答案 披薩 2012年3月20日 9:39
    2012年3月20日 8:54
    版主
  • '每三行读一行参考
    For j As Integer=0 To 你的List实体.Count-1 Step 3
      ListBox.Items.Add(litems(j).ToString())
    Next

    請問

    你的List实体   

    是要放什麼?

    還有如果這兩個

    '倒数7~5

    For i As Integer=6 To 4 Step -1 ListBox1.Items.Add(litems(i).ToString()) Next '每三行读一行参考 For j As Integer=0 To 你的List实体.Count-1 Step 3 ListBox.Items.Add(litems(j).ToString()) Next

    要整合該如何改呢


    • 已编辑 披薩 2012年3月20日 9:07
    2012年3月20日 9:06
  • 放你第二个ListBox中呈现的全部内容,然后有选择加载到里边去。

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年3月20日 9:07
    版主
  • 我還是不董 

    放控件沒辦法,放數字也沒辦法

    ListBox中呈现的全部内容 <=還是不董?全部內容?內容是字串怎放?可以舉例?

    然后有选择加载到里边去。<=我沒有要選擇ListBox裡面的東西,只是要看


    • 已编辑 披薩 2012年3月20日 9:14
    2012年3月20日 9:13
  • 请问你这个图是不是每三行读取一次?你这里既然显示的全部的数据,那么不要直接加入到ListBox而是先加入到List中,然后使用For循环加入到ListBox中。你基础太差,先看看List使用方法再说。

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    • 已标记为答案 披薩 2012年3月20日 9:39
    • 取消答案标记 披薩 2012年3月20日 11:53
    2012年3月20日 9:16
    版主
  • 圖他是一次全部性的讀取進來的,沒整理過分別是ˋ帳號ˋ暱稱ˋ發言時間ˋ跟發言主題 

    List這是什麼?控件?

    2012年3月20日 9:26
  • 那個謝謝你幫忙

    For i As Integer = 70 To 205 'Step -1
          i += 3
          ListBox1.Items.Add(litems(i).ToString())
    Next

    每3次讀一行我搞定了


    • 已标记为答案 披薩 2012年3月20日 9:39
    • 已编辑 披薩 2012年3月20日 9:40
    2012年3月20日 9:38
  • 非常高兴你解决了问题。请问还有什么问题没有解决的吗?你应该按照你解决问题的思路去做。

    另外,请取消我最后一个答案的标记,因为那没有意义,只是提醒你而已。


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年3月20日 10:56
    版主