Vba Post请求可以';无法从目标页获取响应

Vba Post请求可以';无法从目标页获取响应,vba,web-scraping,xmlhttprequest,Vba,Web Scraping,Xmlhttprequest,当我运行post请求时,在post请求中编写宏会带来我不想要的意外响应。可能它无法从目标页面获取响应。无法识别我所犯的错误?我正在代码下粘贴的原始url 执行搜索前要选中的框: 行业角色=专业服务提供商 其他标准=顶点 Sub Xmlpost() Dim http As New MSXML2.XMLHTTP60 Dim html As New HTMLDocument Dim Items As Object, Item As Object, Elem As Object Dim postdata

当我运行post请求时,在post请求中编写宏会带来我不想要的意外响应。可能它无法从目标页面获取响应。无法识别我所犯的错误?我正在代码下粘贴的原始url

执行搜索前要选中的框:

行业角色=专业服务提供商

其他标准=顶点

Sub Xmlpost()
Dim http As New MSXML2.XMLHTTP60
Dim html As New HTMLDocument
Dim Items As Object, Item As Object, Elem As Object
Dim postdata As String

postdata = "DoMemberSearch=1&mas_last=&mas_comp=&mas_city=&mas_stat=&mas_cntr=&mas_type=Professional+Services+Providers&OtherCriteria=1"
With http
    .Open "POST", "https://www.infocomm.org/cps/rde/xchg/infocomm/hs.xsl/memberdirectory.htm", False
    .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
    .send postdata
    html.body.innerHTML = .responseText
End With

Set Items = html.getElementById("paginationDataPool").getElementsByTagName("a")
For Each Item In Items
    x = x + 1
    Cells(x, 1) = Item.innerText
Next Item
End Sub
原文:“

搜索应按如下方式进行:

我得到的结果是:


您正在查找使用类
paginationDisplayItem
的元素,但该类仅由浏览器中运行的JavaScript动态添加,如下所示:


然而,在
html
对象中,只有来自POST请求的普通html响应。只需将其保存到一个文件中,自己查看一下,而不是class属性,相同的
div
包含一个id属性:


每个连续条目的尾随数字都增加一个

如果您调整循环以基于该id检索元素,那么一切都将按照您的预期工作

概念证明:

For x = 1 To 57
    Set Item = html.getElementById("paginationItem_" & x)
    Cells(x, 1) = Item.getElementsByTagName("a")(0).innerText
Next x
显然,您不希望在所有情况下都显式地循环到57,所以可以根据您的喜好随意重构它


顺便说一句:您应该将
项声明为IHTMLElementCollection
并将
项声明为IHTMLElement
-这样,IntelliSense将在您的对象上工作,并且您将具有类型安全性。

您的代码对我有效,它将检索成员目录。到底是什么问题?你希望有什么不同?谢谢利维坦爵士的回答。我上传了一张我最终得到的照片。是的,我也得到了同样的结果。我觉得很好。我重复我的问题:“你希望有什么不同?”再次感谢利维坦爵士的回答。如果我在我的代码中写的是对的,那么你不认为我应该从那页中得到名字列表吗。顺便说一句,我编辑了我的帖子,适合搜索名字。对不起,利维坦爵士,你说的没错。我只是检查了一下,使用一个标记来刮取我得到的内容,是的,它确实从目标页面中获取了名称。我想知道为什么编辑后的代码不能解析名称。我刚刚找到了你在这里解释的。事实上,查看源代码是我在编写代码时不应该忘记的重要因素之一。你的建议使我到达了那里。现在,编辑的代码可以工作了。谢谢。