我正在尝试抓取以下网页
http://www.bseindia.com/markets/equity/EQReports/StockPrcHistori.aspx?flag=0&expandable=7
搜索框(显示输入脚本名称/代码/ ID),是我遇到困难的地方, 我可以使用以下代码将框的值设置为脚本ID 500222 ,
IE.Document.All.Item("ctl00$ContentPlaceHolder1$GetQuote1_smartSearch").innerText = "500222"
但是,如果您尝试在搜索框中手动输入值 500222 ,则会出现一个下拉框,该框将是相应图书的名称。但是,我无法通过VBA使其工作。任何帮助都会很棒。
答案 0 :(得分:5)
在网页.onkeypress
上,分配给文本框的事件处理函数发送HTTP请求,并在每次按键时收到响应。然后它会在下拉列表中显示建议的项目。您不需要弄清楚处理程序功能如何工作。只需打开您问题的网址e。 G。在Chrome中,按 F12 打开开发人员工具窗口,转到网络标签,其中列出了所有页面XHR,在搜索框中输入一些文字,然后在将看到将显示新请求。点击其中一个,在标题标签中,您可以找到请求网址:
你可以像onkeypress事件处理程序那样重现这样的XHR,并从响应中解析Scrip Name,这里是示例VBA代码:
Option Explicit
Sub SmartGetQuoteData()
Dim sScripID As String
Dim sResp As String
Dim sAllItems As String
Dim sFirstCode As String
Dim oXHR As Object
Dim oDoc As Object
Dim oBody As Object
' set your code here
sScripID = "500222"
' make XHR
Set oXHR = CreateObject("Microsoft.XMLHttp")
oXHR.Open "GET", "http://www.bseindia.com/SiteCache/90D/SmartGetQuoteData.aspx?Type=EQ&text=" & sScripID, False
oXHR.Send
sResp = oXHR.ResponseText
' convert HTML to plain text
Set oDoc = CreateObject("htmlfile")
oDoc.Write sResp
Set oBody = oDoc.GetElementsByTagName("body")(0)
sAllItems = oBody.InnerText
' split response and get 1st part
sFirstCode = Split(sAllItems, "|")(0)
' result output
MsgBox sAllItems ' JCT ELECTRONICS LTD|JCTEL|500222
MsgBox sFirstCode ' JCT ELECTRONICS LTD
End Sub