我正在使用 Excel 和 VBA 编写我的第一个数据抓取工具。我无法进入网站的下一页。源代码如下所示:
<li><a href="#" onclick="changePage(2); return false;">Page 2 of 24</a></li>
这是我的 VBA 代码,但似乎不起作用:
For Each l In ie.Document.getElementsByTagName("a")
If l.href = "#" And l.onclick = "changePage(2); return false;" Then
l.Item(2).Click
Exit For
End If
Next l
当我运行代码时,我没有收到任何错误,但它似乎没有转到第 2 页。请记住,第 2 页之后还有更多页面。我的想法是用变量替换“2”稍后将该变量增加一个。但我需要先让它工作。
感谢任何能提供帮助的人。
最佳答案
[编辑:我现在有一个解决方案并且代码已被替换。 -RDH]
首先,我想指出,如果以这种方式检索的数据用于商业目的或除个人用途以外的任何用途,那么它违反了 Kelley Blue Book (kbb.com) 服务条款的两个部分。
仅供引用:BlueBook 或 MLS 等收集、更新和维护数据的网站非常重视他们的数据,他们不喜欢人们抓取数据。我和我的一个老同学聊天,她拥有计算机科学学位,现在是一名房地产经纪人,我向她提到能够从 MLS 中删除房屋数据是多么酷,她差点对我大发雷霆.只是说:人们得到报酬来创建这些数据,人们使用这些数据谋生。 'Nuff 说。 我能够通过在我自己的服务器上创建一个与您正在寻找的格式相同的网页来运行问题代码,因为我在加拿大时获得了不同版本的 bluebook.com 网站。我被重定向到 kbb.com。
+++ 真正的问题+++
问题是带有 # 符号的 hrefs 实际上是完整的 URL,最后附加了 #,当你检查 onClick 事件时它实际上包含完整的函数声明,所以你必须只搜索部分字符串。
' A good idea to declare the proper datatypes
' because IHTMLElement has the click event but IHTMLAnchorElements don't
Dim l As IHTMLElement
Dim htmlanchors As IHTMLElementCollection
' ...
Set htmlanchors = ie.Document.getElementsByTagName("a")
' Look through all the anchor tags on the page
For Each l In htmlanchors
' Check to see the Href contains a # and the onclick event has specific code
If InStr(l.href, "#") And InStr(l.onclick, "changePage(3); return false;") Then
' Click the current anchor link
l.Click
Exit For
End If
Next l
关于javascript - Excel VBA/HTML 单击下拉列表中的下一页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35494363/