【发布时间】:2019-01-08 19:01:45
【问题描述】:
我遇到过许多类似的问题,例如this 和this,但我的问题要简单得多。我想更改网络表单上的日期并使用 POST 请求获取数据
我有这个发出 POST 请求的代码:
Sub winpost()
Dim WebClient As WinHttp.WinHttpRequest
Set WebClient = New WinHttp.WinHttpRequest
Dim searchResult As HTMLTextElement: Dim searchTxt As String
Dim html As New HTMLDocument
Dim Payload As String
Payload = "ContentPlaceHolder1_ddlday=6"
With WebClient
.Open "POST", "http://pib.nic.in/AllRelease.aspx", False
.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
.send (Payload)
.waitForResponse
End With
html.body.innerHTML = WebClient.responseText
Set searchResult = html.querySelector(".search_box_result"): searchTxt = searchResult.innerText
Debug.Print searchTxt
End Sub
网站是this。该页面发送一个关于任何字段更改的发布请求。 在查看网络 > Formdata 部分下的 ChromeDevTools 时,我看到了这个:
ctl00$ContentPlaceHolder1$ddlday: 8
我在 Payload 字符串中尝试了各种版本。但它总是返回相同的页面(1 月 8 日)。
【问题讨论】:
-
似乎您正在抓取使用视图状态的 asp.net 网站。换句话说,它是有状态的网站,因此您不能只发送 POST 请求并获得结果。您需要复制状态进程。我不知道如何在 VBA 中做到这一点,但这并不容易,您可能想看看 Selenium 等 Web 浏览器仿真工具。
-
检查您的帖子数据:当我访问您的网站并更改日期时,帖子数据不仅仅是一天。它看起来相当复杂,怀疑只发布一天时你会得到相同的结果......
-
是的,还有很多其他的表单数据字段。我想我会尝试使用 VBA 中的 ie 对象。(这里只能访问 excel,所以没有硒、节点等)。感谢您指出视图状态解决问题。
标签: excel vba web-scraping httprequest