有没有一种方法可以使用excel vba从html响应文本中获取特定数据
我不能手动操作,因此需要为它开发vba;我的VBA代码用于状态字段,用于从网站上抓取数据,如快照所示。我能够获取状态数据,但无法提取快照中黄色突出显示的地址/位置。需要在网站的“E”栏中为每个单独的访问代码(密码)添加密码。我正在连接电流输出。我对刮擦还不熟悉。这是我在E列需要的地址/位置字段的图像。(访问代码在C列) 以下是我的VBA代码:有没有一种方法可以使用excel vba从html响应文本中获取特定数据,excel,vba,web-scraping,Excel,Vba,Web Scraping,我不能手动操作,因此需要为它开发vba;我的VBA代码用于状态字段,用于从网站上抓取数据,如快照所示。我能够获取状态数据,但无法提取快照中黄色突出显示的地址/位置。需要在网站的“E”栏中为每个单独的访问代码(密码)添加密码。我正在连接电流输出。我对刮擦还不熟悉。这是我在E列需要的地址/位置字段的图像。(访问代码在C列) 以下是我的VBA代码: Option Explicit Public Sub GetStatus() On Error GoTo ErrHandler Dim ht
Option Explicit
Public Sub GetStatus()
On Error GoTo ErrHandler
Dim html As MSHTML.HTMLDocument, xhr As Object, colourLkup As Object
Dim ws As Worksheet, senhas(), i As Long, results()
Call CopyCommentText
Set ws = ThisWorkbook.Worksheets("Client")
senhas = Application.Transpose(ws.Range("C2:C" & ws.Cells(ws.Rows.Count, "C").End(xlUp).Row))
ReDim results(1 To UBound(senhas))
Set colourLkup = CreateObject("Scripting.Dictionary")
colourLkup.Add "active1", "green"
colourLkup.Add "active3", "orange"
colourLkup.Add "valid", "valid"
Set html = New MSHTML.HTMLDocument
Set xhr = CreateObject("MSXML2.XMLHTTP")
For i = LBound(senhas) To UBound(senhas)
If senhas(i) <> vbNullString Then
With xhr
.Open "POST", "https://nacionalidade.justica.gov.pt/Home/GetEstadoProcessoAjax", False
.setRequestHeader "User-Agent", "Mozilla/5.0"
.setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"
.send "SenhaAcesso=" & senhas(i)
html.body.innerHTML = .responseText
End With
Dim nodes As Object, classinfo() As String
Set nodes = html.querySelectorAll(".active1, .active3")
classinfo = Split(nodes(nodes.Length - 1).className, Chr$(32))
results(i) = Replace$(classinfo(1), "step", vbNullString) & "-" & colourLkup(classinfo(2))
End If
Set nodes = Nothing
Next
ws.Cells(2, 4).Resize(UBound(results), 1) = Application.Transpose(results)
ErrHandler:
'Error No. 1004 occurs in this case if worksheet with the same name already exists
If Err = 91 Then
'MsgBox "Invalid Code" & Chr(10) & Sheet1.Cells(i + 568, 4).Value & " " & "Row" & i + 568
classinfo(1) = "Invalid"
classinfo(2) = "Valid"
Resume Next
End If
Call CopyCommentText
Call Copy_With_AutoFilter1
End Sub
选项显式
公共子状态()
关于错误转到错误处理程序
将html变暗为MSHTML.HTMLDocument,将xhr变为对象,将Color-Up变为对象
将ws设置为工作表、senhas()、i设置为长、结果()
调用CopyCommentText
设置ws=ThisWorkbook.Worksheets(“客户端”)
senhas=Application.Transpose(ws.Range(“C2:C”和ws.Cells(ws.Rows.Count,“C”).End(xlUp.Row))
ReDim结果(1至UBound(senhas))
设置colourkup=CreateObject(“Scripting.Dictionary”)
颜色组合。添加“活动1”、“绿色”
加上“活性3”,“橙色”
配色方案。添加“有效”、“有效”
Set html=New MSHTML.HTMLDocument
设置xhr=CreateObject(“MSXML2.XMLHTTP”)
对于i=LBound(senhas)到UBound(senhas)
如果senhas(i)vbNullString,则
使用xhr
.打开“POST”https://nacionalidade.justica.gov.pt/Home/GetEstadoProcessoAjax”“错
.setRequestHeader“用户代理”、“Mozilla/5.0”
.setRequestHeader“内容类型”,“应用程序/x-www-form-urlencoded;字符集=UTF-8”
.send“SenhaAcesso=”&senhas(i)
html.body.innerHTML=.responseText
以
Dim节点作为对象,classinfo()作为字符串
Set nodes=html.querySelectorAll(“.active1.active3”)
classinfo=Split(节点(nodes.Length-1).className,Chr$(32))
结果(i)=替换$(classinfo(1),“step”,vbNullString)&“-”和颜色库(classinfo(2))
如果结束
设置节点=无
下一个
ws.Cells(2,4).Resize(UBound(results),1)=Application.Transpose(results)
错误处理程序:
'如果已存在同名工作表,则在这种情况下会出现错误1004
如果Err=91,则
'MsgBox“无效代码”&Chr(10)&Sheet1.Cells(i+568,4)。Value&&“行”&i+568
classinfo(1)=“无效”
classinfo(2)=“有效”
下一步继续
如果结束
调用CopyCommentText
使用自动过滤器1调用Copy\u
端接头
这是我制作的密码输出,因为它是保密的
下面是我使用调试打印得到的响应文本
尝试以下方法获取地址:
Public Sub GetAddress()
Const pUrl$ = "https://nacionalidade.justica.gov.pt/Home/GetEstadoProcessoAjax"
Dim Html As New HTMLDocument, Xhr As New XMLHTTP60
Dim address$
With Xhr
.Open "POST", pUrl, False
.setRequestHeader "User-Agent", "Mozilla/5.0"
.setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"
.send "SenhaAcesso=0908-1378-1843"
Html.body.innerHTML = .responseText
End With
address = Html.querySelector("#block_container + div[style*='bold']").innerText
MsgBox address
End Sub
请尝试以下操作以获取地址:
Public Sub GetAddress()
Const pUrl$ = "https://nacionalidade.justica.gov.pt/Home/GetEstadoProcessoAjax"
Dim Html As New HTMLDocument, Xhr As New XMLHTTP60
Dim address$
With Xhr
.Open "POST", pUrl, False
.setRequestHeader "User-Agent", "Mozilla/5.0"
.setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"
.send "SenhaAcesso=0908-1378-1843"
Html.body.innerHTML = .responseText
End With
address = Html.querySelector("#block_container + div[style*='bold']").innerText
MsgBox address
End Sub
请提供一个示例访问代码“0908-1378-1843”供您参考。请提供一个示例访问代码“0908-1378-1843”供您参考。如果您喜欢坚持传统方法,这就是如何实现相同的
address=Html.getElementById(“块容器”).NextSibling.innerText
。当我需要通过一系列访问代码(senhas)时,需要一些指导。您可以这样修改吗?另外,您可以在代码中进行调整吗?因为我这里有700到800个senhas,对于单个访问代码,代码工作正常。感谢alotIf如果您喜欢坚持传统方法,这就是如何实现相同的address=Html.getElementById(“block_container”).NextSibling.innerText
。需要一些指导,因为我需要传递一系列访问代码(senhas)你们能用那个种方式修改吗?你们能在代码中调整吗?因为我这里有700到800个senhas,对于单访问代码来说,代码工作得很好。非常感谢