bab*_*doc 2 vba dom xmlhttprequest excel-vba web-scraping
我正在尝试抓取以下网页
http://www.bseindia.com/markets/equity/EQReports/StockPrcHistori.aspx?flag=0&expandable=7
在搜索框(它说进入股代名称/代码/ ID) ,在这里我有困难,我可以框的值设置为凭证编号500222通过使用下面的代码,
IE.Document.All.Item("ctl00$ContentPlaceHolder1$GetQuote1_smartSearch").innerText = "500222"
但是,如果您尝试在搜索框中手动输入值500222,则会出现一个下拉框,该框将是相应脚本的名称.但是,我无法通过VBA使其工作.任何帮助都会很棒.
在.onkeypress分配给文本框的网页事件处理函数发送HTTP请求,并在每次按键时接收响应.然后它会在下拉列表中显示建议的项目.您不需要弄清楚处理程序函数如何工作.只需打开您问题的网址,例如在Chrome中,按F12以打开" 开发人员工具"窗口,转到" 网络"标签,其中列出了所有页面XHR,在搜索框中键入一些文本,您将看到将显示新请求.单击其中一个,在" 标题"选项卡中,您可以找到" 请求URL":
你可以像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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3191 次 |
| 最近记录: |