Html VBA:使用<;ul和<;李和<;部门及<;跨度
我正在使用VBA从Html VBA:使用<;ul和<;李和<;部门及<;跨度,html,excel,vba,web-scraping,Html,Excel,Vba,Web Scraping,我正在使用VBA从中的HTML中提取数据,您可以获取两个节点列表,一个用于日期,一个用于事项,然后将它们循环到工作表中。基于数据绑定属性值匹配日期事项关于类名: Dim dates As Object, matters As Object, i As Long, ws As Worksheet Set ws = ThisWorkbook.Worksheets("Sheet1") Set dates = ie.document.querySelectorAll("[data-bind^='tex
中的HTML中提取数据,您可以获取两个节点列表,一个用于日期,一个用于事项,然后将它们循环到工作表中。基于数据绑定
属性值匹配日期
<代码>事项
关于类名
:
Dim dates As Object, matters As Object, i As Long, ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1")
Set dates = ie.document.querySelectorAll("[data-bind^='text:createdDate']") '.wo-notes-col-1 [data-bind^='text:createdDate']
Set matters = ie.document.querySelectorAll(".wo-notes")
With ws
For i = 0 To dates.Length - 1
.Cells(i + 1, 1) = dates.Item(i).innertext
.Cells(i + 1, 2) = matters.Item(i).innertext
Next
End With
从C列读取值的示例:
Option Explicit
Public Sub GetMatters()
Dim ws As Worksheet, lastRow As Long, urls(), results(), ie As SHDocVw.InternetExplorer, r As Long
Set ie = New SHDocVw.InternetExplorer
Set ws = ThisWorkbook.Worksheets("Sheet1")
lastRow = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row
urls = Application.Transpose(ws.Range("C2:C" & lastRow).Value)
ReDim results(1 To 1000, 1 To 2)
With ie
.Visible = True
For i = LBound(urls) To UBound(urls)
.navigate2 "https://www.MyURL/sc/wo/Worders/index?id=" & urls(i)
While .Busy Or .readyState <> 4: DoEvents: Wend
Dim dates As Object, matters As Object, i As Long
Set dates = .document.querySelectorAll("[data-bind^='text:createdDate']") '.wo-notes-col-1 [data-bind^='text:createdDate']
Set matters = .document.querySelectorAll(".wo-notes")
For i = 0 To dates.Length - 1
r = r + 1
results(r, 1) = dates.Item(i).innertext
results(r, 2) = matters.Item(i).innertext
Next
Set dates = Nothing: Set matter = dates
Next
.Quit
End With
ws.Cells(2, 1).Resize(UBound(results, 1), UBound(results, 2)) = results
End Sub
选项显式
公共事务
将ws作为工作表,最后一行作为长,URL(),results(),即作为SHDocVw.InternetExplorer,r作为长
设置ie=New SHDocVw.InternetExplorer
设置ws=ThisWorkbook.Worksheets(“Sheet1”)
lastRow=ws.Cells(ws.Rows.Count,“C”).End(xlUp).Row
URL=Application.Transpose(ws.Range(“C2:C”和lastRow).Value)
重拨结果(1到1000,1到2)
与ie
.Visible=True
对于i=LBound(URL)到UBound(URL)
.导航2“https://www.MyURL/sc/wo/Worders/index?id=“&URL(i)
忙时或准备时状态4:DoEvents:Wend
黯淡的日期作为对象,重要的事情作为对象,我一样长
设置日期=.document.querySelectorAll(“[data bind^='text:createdDate']”)。wo-notes-col-1[data bind^='text:createdDate']
设置事项=.document.queryselectoral(“.wo注释”)
对于i=0到日期。长度-1
r=r+1
结果(r,1)=日期。项目(i)。内部文本
结果(r,2)=事项。第(i)项。内部文本
下一个
设置日期=无:设置事项=日期
下一个
退出
以
ws.Cells(2,1).Resize(UBound(results,1),UBound(results,2))=结果
端接头
参考文献:
谢谢QHarr,你花了一些时间来解决我的问题。你能帮我把代码循环几次吗?你说的循环几次是什么意思?上面写的表是否如预期的那样?意味着我在URL 76888564中提到的数字将改变频率。这意味着我需要使用这个宏处理多个数字(工作顺序)。是否可以循环多个工作单。很抱歉给您带来不便。谢谢这些新结果适用于不同的工单吗?您需要一个类似于如下所示的循环结构:
Option Explicit
Public Sub GetMatters()
Dim ws As Worksheet, lastRow As Long, urls(), results(), ie As SHDocVw.InternetExplorer, r As Long
Set ie = New SHDocVw.InternetExplorer
Set ws = ThisWorkbook.Worksheets("Sheet1")
lastRow = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row
urls = Application.Transpose(ws.Range("C2:C" & lastRow).Value)
ReDim results(1 To 1000, 1 To 2)
With ie
.Visible = True
For i = LBound(urls) To UBound(urls)
.navigate2 "https://www.MyURL/sc/wo/Worders/index?id=" & urls(i)
While .Busy Or .readyState <> 4: DoEvents: Wend
Dim dates As Object, matters As Object, i As Long
Set dates = .document.querySelectorAll("[data-bind^='text:createdDate']") '.wo-notes-col-1 [data-bind^='text:createdDate']
Set matters = .document.querySelectorAll(".wo-notes")
For i = 0 To dates.Length - 1
r = r + 1
results(r, 1) = dates.Item(i).innertext
results(r, 2) = matters.Item(i).innertext
Next
Set dates = Nothing: Set matter = dates
Next
.Quit
End With
ws.Cells(2, 1).Resize(UBound(results, 1), UBound(results, 2)) = results
End Sub