嗨,我是VBA的新手,正在努力提升我的VBA技能。
我正试图获得";所有者名称";以及";邮寄地址";从下面的网络链接
https://www.pbcgov.org/papa/Asps/PropertyDetail/PropertyDetail.aspx?parcel=30424032060001820
通过在Sheet1〃中使用该ID;A1〃;
30-42-40-32-06-000-1820(该ID与姓名和邮寄地址将粘贴在"B"栏和"C"栏中的人相关。
我试过了,但没能成功。
任何人的帮助都将不胜感激。
Sub Data()
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
Url = "https://www.pbcgov.org/papa/?fbclid=IwAR28Ao4d0Ic5hTcd4w6BYv5FwaVYKFc3sCtmcqPI8Ctw2Q0jUy2zIdc7I-c"
'Wait for site to fully load
ie.Navigate2 Url
Do While ie.Busy = True
DoEvents
Loop
RowCount = 1
With Sheets("Sheet1")
.Cells.ClearContents
RowCount = 1
For Each itm In ie.document.all
.Range("A" & RowCount) = itm.tagname
.Range("B" & RowCount) = itm.ID
.Range("c" & RowCount) = Left(itm.innertext, 1024)
RowCount = RowCount + 1
Next itm
End With
End Sub
这可能有点先进,但提供了另一种看待问题的方法。
您需要的信息分布在两个表和这些表中的两行中。一个所有者信息表(分为几行(;同样,还有一张地址表。
您可以使用css模式#ownerInformationDiv table:nth-child(1)
来隔离这两个表,通过应用ie.document
的querySelectorAll方法在nodeList中返回。
循环每个表,在给定的表中,循环行(忽略标题行(并连接每行中的文本。文本组合后,对于给定的表格,将其写在表格上。
另一件需要注意的事情包括:
整页加载等待
While .Busy Or .ReadyState <> READYSTATE_COMPLETE: DoEvents: Wend
具有类的合格对象
Dim ie As SHDocVw.InternetExplorer
使用描述性标题
Public Sub WriteOutOwnersInfo()
VBA:
Option Explicit
Public Sub WriteOutOwnersInfo()
Dim ie As SHDocVw.InternetExplorer
Set ie = New SHDocVw.InternetExplorer
With ie
.Visible = True
.Navigate2 "https://www.pbcgov.org/papa/Asps/PropertyDetail/PropertyDetail.aspx?parcel=30424032060001820"
While .Busy Or .ReadyState <> READYSTATE_COMPLETE: DoEvents: Wend
Dim tables As Object
Set tables = .Document.querySelectorAll("#ownerInformationDiv table:nth-child(1)")
Dim currTable As Object, currRow As Object, c As Long
Dim i As Long, j As Long, lineOutput As String
For i = 0 To tables.Length - 1
Set currTable = tables.Item(i)
lineOutput = vbNullString
For j = 1 To tables.Item(i).Rows.Length - 1
Set currRow = currTable.Rows(j)
lineOutput = lineOutput & Chr$(32) & Trim$(currRow.innertext)
Next
c = c + 1
ActiveSheet.Cells(1, c) = Trim$(lineOutput)
Next
.Quit
End With
End Sub