Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA-使用动态内容的XMLHTTP请求刮取货物编号跟踪状态_Excel_Vba_Web Scraping - Fatal编程技术网

Excel VBA-使用动态内容的XMLHTTP请求刮取货物编号跟踪状态

Excel VBA-使用动态内容的XMLHTTP请求刮取货物编号跟踪状态,excel,vba,web-scraping,Excel,Vba,Web Scraping,我对使用VBA进行web抓取还不熟悉,并询问了一些关于从SO社区抓取所需值的回复 我必须创建几个功能,从每个不同的网站获取所提供货物编号的状态 下面是一位用户帮助我的代码。但是,我不熟悉正则表达式和VBA的替换方法。我正试图简化这段代码,以便我也可以将其复制到其他网站。我知道每个网站都需要一个唯一的代码,但如果基础保持不变,我可以修改需要删除的确切元素,这将是理想的 这是我目前拥有的代码 Function FlightStat_AF(cargoNo As Variant) As String

我对使用VBA进行web抓取还不熟悉,并询问了一些关于从SO社区抓取所需值的回复

我必须创建几个功能,从每个不同的网站获取所提供货物编号的状态

下面是一位用户帮助我的代码。但是,我不熟悉正则表达式和VBA的替换方法。我正试图简化这段代码,以便我也可以将其复制到其他网站。我知道每个网站都需要一个唯一的代码,但如果基础保持不变,我可以修改需要删除的确切元素,这将是理想的

这是我目前拥有的代码

Function FlightStat_AF(cargoNo As Variant) As String

  Const url = "https://www.afklcargo.com/mycargo/api/shipment/detail/057-"
  Dim elem As Object
  Dim Result As String
  Dim askFor As String
  
  With CreateObject("MSXML2.XMLHTTP")
    .Open "GET", url & cargoNo, False
    .send
    Result = .responseText
    
    If .Status = 200 Then
      If InStr(1, Result, "faultDescription") = 0 Then
        askFor = """metaStatus"""
      Else
        askFor = """faultDescription"""
      End If
      
      With CreateObject("VBScript.RegExp")
        .Global = True
        .MultiLine = True
        .Pattern = askFor & ":(.*?),"
        Set elem = .Execute(Result)
      End With
      
      Result = Replace(elem(0).SubMatches(0), Chr(34), "")
    Else
      Result = "No cargoID"
    End If
  End With
  
  FlightStat_AF = Result
End Function
现在我正在尝试为下面的网站创建一个类似的功能

URL=

样本货物编号=60848034

要刮取的图元在所附的中以黄色高亮显示


有人能帮我以一种更简单的方式复制Zwenn提供的上述代码,以便我可以将其用作我需要搜索的其他网站的参考。

以下内容应为您提供所需的状态,只要它可用

Sub PrintStatus()
    MsgBox GetDeliveryStat("60848034")
End Sub

Function GetDeliveryStat(cargoNo As Variant) As String

    Const Url = "https://booking.unitedcargo.com/skychain/app?service=page/nwp:Trackshipmt&doc_typ=AWB&awb_pre=016&awb_no="
    Dim dStatCheck$, deliveryStat$, S$
    
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", Url & cargoNo, False
        .send
        S = .responseText
    End With
    
    With CreateObject("HTMLFile")
        .write S
        On Error Resume Next
        dStatCheck = .getElementById("trackShiptablerowInner0").getElementsByTagName("b")(0).innerText
        On Error GoTo 0
        If dStatCheck <> "" Then
            deliveryStat = dStatCheck
        Else
           deliveryStat = "Not Found"
        End If
    End With
    
    GetDeliveryStat = deliveryStat
End Function
子打印状态()
MsgBox GetDeliveryStat(“60848034”)
端接头
函数GetDeliveryStat(cargoNo作为变量)作为字符串
常量Url=”https://booking.unitedcargo.com/skychain/app?service=page/nwp:Trackshipmt&doc_typ=AWB&awb_pre=016&awb_no="
Dim dStatCheck$,deliveryStat$,S$
使用CreateObject(“MSXML2.XMLHTTP”)
.打开“获取”,Url和cargoNo,False
.发送
S=.responseText
以
使用CreateObject(“HTMLFile”)
.写S
出错时继续下一步
dStatCheck=.getElementById(“trackShiptablerowInner0”).getElementsByTagName(“b”)(0).innerText
错误转到0
如果是dStatCheck“”,则
deliveryStat=dStatCheck
其他的
deliveryStat=“未找到”
如果结束
以
GetDeliveryStat=deliveryStat
端函数

已交付
状态的位置是否始终在该特定行中,或者可能在表中的任何位置?你能再分享一个卡哥特诺吗?@SIM,是的。它将位于该特定行中。基本上这是第一排。我想刮去牢房里的东西。更多货物编号为10205436、60848034、12345678、60848045如果您在循环中运行此函数,最好修改函数以将xhr和htmldocument变量作为参数传递,而不是重复创建和销毁。另外,如果作为字符串传递,则在函数签名中声明为字符串,并传递ByVal。谢谢@Sim。代码工作得很好。我将尝试为3或4个其他网站复制此代码。但我可能需要一些帮助,以防我无法获得任何网站的正确代码。