使用Excel VBA获取HTML源代码-弹出窗口

使用Excel VBA获取HTML源代码-弹出窗口,html,vba,Html,Vba,下面的文章提供了一种使用以下代码提取url的HTML的方法 代码工作得很好,但我的问题是我的网站(内部网站)在我第一次登录时有一个弹出窗口。所以通过这个方法访问会得到弹出窗口的HTML。我怎样才能越过这扇窗户 手动操作网站时,我第一次访问网页时,弹出窗口会出现几秒钟,然后消失,我单击按钮登录 更新: 更深入地说,返回的html是站点的登录窗口。通常,在这个基于内联网的网站上,即我一天中的第一次访问,我单击“继续”按钮(没有用户名/密码),它会自动让我登录。任何时候我访问网站前进,我可以直接

下面的文章提供了一种使用以下代码提取url的HTML的方法

代码工作得很好,但我的问题是我的网站(内部网站)在我第一次登录时有一个弹出窗口。所以通过这个方法访问会得到弹出窗口的HTML。我怎样才能越过这扇窗户

手动操作网站时,我第一次访问网页时,弹出窗口会出现几秒钟,然后消失,我单击按钮登录


更新: 更深入地说,返回的html是站点的登录窗口。通常,在这个基于内联网的网站上,即我一天中的第一次访问,我单击“继续”按钮(没有用户名/密码),它会自动让我登录。任何时候我访问网站前进,我可以直接到网站的一部分,而无需重新登录。我用作url的链接是指向网站上某个页面的直接链接。对如何让XMLHTTP登录到该站点感到好奇


这是登录名-它不是标准的用户名和密码。它是用户名、密码、部门和城市。还有一个单选按钮,可在两种设置之间切换。然后我会单击登录。

我会首先尝试这个小修改,以便准确获得中间页面的
响应库(仅一次):

然后,我将从
即时窗口
复制响应,并在下一个代码中使用它:

Public Function getHTTP(ByVal url As String) As String
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", url, False: .send

        Do While StrConv(.responseBody, vbUnicode) = "the copied text from Immediate Window"
            DoEvents
        Loop
        getHTTP = StrConv(.responseBody, vbUnicode)
    End With
End Function
或者,如果回答太长,请使用
Left(“讨论中的文本”,10)=“任意x”

已编辑:尝试以下一种方式转换初始函数,以包括身份验证:

Public Function getHTTP(ByVal url As String) As String
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", url, False: .Send
        .setRequestHeader "Authorization", "Basic " & Base64Encode(Your_User & ":" & password)
        getHTTP = StrConv(.responseBody, vbUnicode)
    End With
End Function

我会首先尝试这个小的修改,以便准确地获得中间页面的
responseBody
(仅一次):

然后,我将从
即时窗口
复制响应,并在下一个代码中使用它:

Public Function getHTTP(ByVal url As String) As String
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", url, False: .send

        Do While StrConv(.responseBody, vbUnicode) = "the copied text from Immediate Window"
            DoEvents
        Loop
        getHTTP = StrConv(.responseBody, vbUnicode)
    End With
End Function
或者,如果回答太长,请使用
Left(“讨论中的文本”,10)=“任意x”

已编辑:尝试以下一种方式转换初始函数,以包括身份验证:

Public Function getHTTP(ByVal url As String) As String
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", url, False: .Send
        .setRequestHeader "Authorization", "Basic " & Base64Encode(Your_User & ":" & password)
        getHTTP = StrConv(.responseBody, vbUnicode)
    End With
End Function

弹出窗口的头部是否有任何独特之处?也许这样的东西可以在你的函数中进行评估
如果SomeUniqueAttribute=True,那么函数Else WaitForSomeTimer
是否可能?可能是您可以使用或while循环等待,直到预期的html源可用?如果您正在寻找解决方案,而不考虑工具,那么我强烈建议Selenium也能做到这一点。你能做一个初始登录xhr吗?达莫:我正在尝试摆脱使用浏览器来获得结果。你能详细说明一下如何“进行初始登录xhr”吗?弹出窗口的头部有什么独特之处吗?也许这样的东西可以在你的函数中进行评估
如果SomeUniqueAttribute=True,那么函数Else WaitForSomeTimer
是否可能?可能是您可以使用或while循环等待,直到预期的html源可用?如果您正在寻找解决方案,而不考虑工具,那么我强烈建议Selenium也能做到这一点。你能做一个初始登录xhr吗?达莫:我正在尝试摆脱使用浏览器来获得结果。QHarr:你能详细说明如何“进行初始登录xhr”吗?谢谢你的回复。因此,它似乎是停留在登录。我已经重建了HTML,在“这里”有一个超链接。有办法点击它吗?{如果自动身份验证不适用于您的帐户,您可以手动登录}@M.Marzouk:如果找不到解决方案,请尝试我的上次更新(编辑后)。它包括一种身份验证方法…我还没有找到解决方案。我已经更新了主要问题,添加了登录的外观。输入的用户名和密码不止一个。关于如何解决这个问题有什么想法吗?谢谢你的回复。因此,它似乎是停留在登录。我已经重建了HTML,在“这里”有一个超链接。有办法点击它吗?{如果自动身份验证不适用于您的帐户,您可以手动登录}@M.Marzouk:如果找不到解决方案,请尝试我的上次更新(编辑后)。它包括一种身份验证方法…我还没有找到解决方案。我已经更新了主要问题,添加了登录的外观。输入的用户名和密码不止一个。关于如何解决这个问题有什么想法吗?