2017-12-18 232 views
-1

IM试图从tr标签的国家,但它只是给我的表的第一行我怎么刮的特定行HTML表格刮使用VBA

Sub ipsearch() 
    Dim x As Integer 
    x = 2 

    Do Until x = 4000 

     Dim ie As New InternetExplorer  
     ie.navigate "https://whatismyipaddress.com/ip/" & Range("E" & x).Value 

     Do  
      DoEvents   
     Loop Until ie.readyState = READYSTATE_COMPLETE 

     Dim doc As HTMLDocument  
     Set doc = ie.document  
     Dim sDD As String 

     sDD = Trim(doc.getElementsByTagName("td")(, 0).innerText) 

     Range("F" & x).Value = sDD  
     x = x + 1  
    Loop 

End Sub 

enter image description here 蓝色位是什么我得到和黄是什么,我想

回答

2

这是后话,将在您的例子返回“联合王国”:

Sub ipsearch() 
    Dim x As Long 
    x = 2 

    Do Until x = 4000 
     Dim ie As New InternetExplorer 
     ie.navigate "https://whatismyipaddress.com/ip/" & "2.99.247.66" 

     Do 
      DoEvents 

     Loop Until ie.readyState = READYSTATE_COMPLETE 
     Dim doc As HTMLDocument 
     Set doc = ie.document 
     Dim sDD As String 
     ie.Visible = True 

     sDD = Trim(doc.getElementsByTagName("tbody")(1).innerText) 
     Range("F" & x).Value = Split(sDD, vbCrLf)(5) 

     x = x + 1 

    Loop 

End Sub 

一般情况下,自动对焦新编写更好的代码的想法。

  • 真的很高兴知道你在用什么 - 例如,在你的截图中,来自IP的数字取自蓝色以上的行,例如,从“2.99.247.66的详细信息”。
  • 当您向StackOverflow提供代码时,请务必提及您的代码正在使用的其他库。你的情况这两种:

enter image description here

,或者确保您的代码使用后期绑定,因此图书馆不应该添加。 - 一般情况下,可以考虑使用Long,在Integer代替 - Why Use Integer Instead of Long?


  • 格式代码,当你提交。它看起来好一点。 Ctrl + K是StackOverflow中的快捷方式。
  • 对于VBA使用Option Explicit
  • 尝试硬编码问题中的变量。你的情况:

"https://whatismyipaddress.com/ip/" & "2.99.247.66"

+0

谢谢你我会和我一起尝试你的版本 – yusuf

2

给这个镜头。它会把你的国名带到Range(“A1”)。

Sub ipsearch() 
    Dim IE As New InternetExplorer, html As HTMLDocument 
    Dim post As Object 

    With IE 
     .Visible = False 
     .navigate "https://whatismyipaddress.com/ip/2.99.247.66" 
     Do Until .readyState = READYSTATE_COMPLETE: Loop 
     Set html = .document 
    End With 

    For Each post In html.getElementsByTagName("th") 
     If InStr(post.innerText, "Country:") > 0 Then [A1] = post.ParentNode.LastChild.innerText: Exit For 
    Next post 
    IE.Quit 
End Sub 

引用添加到库中:

1. Microsoft Internet Controls 
2. Microsoft HTML Object Library 

,并使其方式速度更快,请尝试以下之一:

Sub ipsearch() 
    Dim HTTP As New XMLHTTP60, html As New HTMLDocument 
    Dim post As Object 

    With HTTP 
     .Open "GET", "https://whatismyipaddress.com/ip/2.99.247.66", False 
     .send 
     html.body.innerHTML = .responseText 
    End With 

    For Each post In html.getElementsByTagName("th") 
     If InStr(post.innerText, "Country:") > 0 Then [A1] = post.ParentNode.LastChild.innerText: Exit For 
    Next post 
End Sub 

引用添加到库中:

1. Microsoft XML,v6.0 ''or the version you have 
2. Microsoft HTML Object Library 

产量:

United Kingdom