网络抓取在IE 9中运行良好,但在IE 11中有所突破

时间:2015-05-14 13:25:30

标签: excel-vba web-scraping vba excel

我有一个程序从IE9中的网站上抓取信息但是在更新到IE11之后,程序在尝试输入一段数据时中断了 网页上的输入框。代码识别字段,并在调试时将其列为对象,但是当我尝试使用CUSIP.value在框中输入值时,它不会在网页上输入任何内容。我认为它与浏览器更新后更新的源有关。我本可以发誓,HTML中“txtCusipNo”的标识符被列为ID而不是Name。任何帮助表示赞赏。感谢。

网站上的HTML

<td class="tbl1">
<INPUT TYPE="TEXT" NAME="txtCusipNo" VALUE="" CLASS="input" SIZE="11" MAXLENGTH="9">
<a href="javascript:;" onclick="window.open('/SecFinderII1/SIM_SeekSearch.jsp?clientobjectreference=frmSearchEntry.txtCusipNo&formname=frmSearchEntry&textboxname=txtCusipNo','SecurityFinder','resizable=yes,scrollbars=yes,status=no');"><img src="/RDPANN/pbs/images/lookup.gif" border="0" alt="Open Security Finder" align="absmiddle"></a>&nbsp;<IMG NAME="txtCusipIMG"SRC="/RDPANN/pbs/images/req.gif" ALIGN="ABSMIDDLE">
</td>

VBA代码

Private Sub EnterCUSIP()
Retry:
Set CUSIP = Doc.getElementById("txtCusipNo")
Err.Clear
valA = ActiveSheet.Cells(row, 1)
On Error Resume Next
CUSIP.Value = ActiveSheet.Cells(row, 1) 'insert CUSIP
If Err.Number = 91 Then GoTo Retry
Set CurrentWindow = IE.document.parentWindow
Call CurrentWindow.execScript("javascript:processForm(document.forms.frmSearchEntry)")  'Search (hit enter)
If Err.Number = -2147352319 Then Exit Sub
On Error GoTo 0
Do While (IE.Busy Or IE.READYSTATE <> READYSTATE.READYSTATE_COMPLETE):DoEvents: Loop
End Sub

1 个答案:

答案 0 :(得分:0)

如果您怀疑HTML源代码已被更改,并且可能会在未来进行未经通知的更改,我建议您切换到ie.Document.All.Item属性。

Doc.all.Item("txtCusipNo").Value = 123

.Item标识符可以是ID或名称,两者之间没有区别。但是,我担心识别因素(例如 txtCusipNo )在该页面上可能不是唯一的。是的,假设是,但越来越多的HTML开发人员正在使用divs(0).getElementById("txtCusipNo")divs(1).getElementById("txtCusipNo")等代码。