【问题标题】:Using MSXML in a VBA script to pull website data在 VBA 脚本中使用 MSXML 来提取网站数据
【发布时间】:2019-04-22 16:29:32
【问题描述】:

我有来自http://dailydoseofexcel.com/archives/2011/03/08/get-data-from-website-that-requires-a-login/#comment-60553的以下代码

Sub GetTable()
Dim xml As Object ' MSXML2.XMLHTTP60
Dim htmlDoc As Object ' MSHTML.HTMLDocument
Dim htmlBody As Object ' MSHTML.HTMLBody
Dim ieTable As Object
Dim clip As DataObject

Set xml = GetMSXML

With xml
      .Open "POST", "https://web.site", False
      .send "username=myname&password=mypassword"""
End With
With xml
      .Open "POST", "https://web.site/anotherpage", False
End With
Set htmlDoc = CreateHTMLDoc
Set htmlBody = htmlDoc.Body
htmlBody.innerHTML = xml.responseText

Set ieTable = htmlBody.all.Item("report")

    'copy the tables html to the clipboard and paste to teh sheet
  If Not ieTable Is Nothing Then
        Set clip = New DataObject
        clip.SetText "<html>" & ieTable.outerHTML & "</html>"
        clip.PutInClipboard
        Range("A1").Select
        ActiveSheet.PasteSpecial "Unicode Text"""
    End If

End Sub

Function CreateHTMLDoc() As Object ' MSHTML.HTMLDocument
Set CreateHTMLDoc = CreateObject("htmlfile")
End Function

Function GetMSXML() As Object ' MSXML2.XMLHTTP
On Error Resume Next
  Set GetMSXML = CreateObject("MSXML2.XMLHTTP")
End Function

使用此代码,我尝试访问网站 web.site 并将用户名和密码传递给登录,然后继续访问网站上的另一个页面,然后将表格的内容(结果)复制到 excel 的 sheet1工作簿。

我尝试使用 f8 进行调试,但没有可视化浏览器,如果我要关注此页面 http://dailydoseofexcel.com/archives/2011/03/08/get-data-from-website-that-requires-a-login/ 那么它有点难以确切地看到正在发生的事情以及失败的地方。

【问题讨论】:

  • 您可以为初学者写出响应或使用 API 测试器(例如 Postman)来查看服务器响应是什么。
  • 谢谢,你能详细说明一下写出回复吗?
  • Debug.Print xml.Status, xml.responseText
  • 1.确保您将凭据发布到正确的 URL, 2. 需要登录的服务/网站通常具有某种客户端/会话管理方式。检查服务器响应中的“Set-Cookie”标头,确保将其包含在后续请求中(尤其是在您登录后)——因为该 cookie 与您的会话相关联。 3. 打开 Internet 浏览器,打开开发人员工具(在 Chrome 中,您可以通过按 F12 来完成此操作)并在您手动登录时监控出现在 Network 选项卡下的请求,这可能会有所帮助——查看需要模拟的请求。

标签: excel vba msxml


【解决方案1】:

试试下面的代码来帮助你进入网站,如果你有任何问题,请在我的频道https://www.youtube.com/watch?v=hfAhmae4iqA留言;

Dim IEe As InternetExplorer
    Dim doc, element
    Set IEe = New InternetExplorer

    IEe.Visible = False 'make true if you want to the internet explorer 
    IEe.Navigate "YOUR WEBSITE"

       Do While IEe.ReadyState = 4: DoEvents: Loop
    Do Until IEe.ReadyState = 4: DoEvents: Loop

Set element = IEe.Document.getElementByID(INSERT ELEMENT ID) 'RIGHT CLICK ON WEBSITE AND SAY INSPECT ELEMENT CLICK THE MOUSE ICON AND THEN CLICK THE TEXT BOX WHERE THE PASSWORD OR USERNAME SHOULD BE INSERTED 

element.Value = "USERNAME"

Set element = IEe.Document.getElementByID(INSERT ELEMENT ID) 'THE FIRST IS FOR USERNAME THE NEXT FOR PASSWORD 

element.Value = "PASSWORD" 'remember storing a password in a macro is not safe  

【讨论】:

  • 快速提问 - 您是否只是尽可能多地回答问题以获取您的 youtube 频道的链接?为什么不将您的频道添加到您的个人资料中,如果人们喜欢您提供的答案,他们可以进一步调查。目前它开始感觉像垃圾邮件。如果我错了,那我道歉。只是你在回答 4-5 年前的问题 - 比如this one
  • 我无意从很久以前的问题中发送垃圾邮件,只是提供见解,如果有人遇到类似问题并遇到问题,我可以提供帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-29
  • 1970-01-01
  • 2014-04-03
相关资源
最近更新 更多