Javascript Excel VBA/HTML从下拉列表中单击下一页

Javascript Excel VBA/HTML从下拉列表中单击下一页,javascript,html,excel,web-scraping,vba,Javascript,Html,Excel,Web Scraping,Vba,我正在使用Excel和VBA编写我的第一个数据刮刀。我被困在网站的下一页。源代码如下所示: <li><a href="#" onclick="changePage(2); return false;">Page 2 of 24</a></li> 当我运行代码时,我没有得到任何错误,但它似乎没有进入第2页。请记住,第2页之后还有更多的页面。我的想法是稍后用变量替换“2”,并将该变量增加1。但我需要先让它工作起来 感谢任何能帮忙的人 你试过了吗 .F

我正在使用Excel和VBA编写我的第一个数据刮刀。我被困在网站的下一页。源代码如下所示:

<li><a href="#" onclick="changePage(2); return false;">Page 2 of 24</a></li>
当我运行代码时,我没有得到任何错误,但它似乎没有进入第2页。请记住,第2页之后还有更多的页面。我的想法是稍后用变量替换“2”,并将该变量增加1。但我需要先让它工作起来

感谢任何能帮忙的人

你试过了吗

.FireEvent ("onclick")
Or
.FireEvent ("onmouseover")
.FireEvent ("onmousedown")
.FireEvent("onmouseup")

代替
。单击
?有时JavaScript操作不响应
。单击

Rick–下面是我的全部代码。我基本上是想从www.thebluebook.com上搜刮

Sub ScrapeData()

Dim ie As InternetExplorer
Dim ele As Object
Dim RowCount As Long
Dim myWebsite As String, mySearch1 As String, mySearch2 As String, mySearch3 As String
Dim Document As HTMLDocument

myWebsite = Range("Website").Value
mySearch1 = Range("search1").Value
mySearch2 = Range("search2").Value
mySearch3 = Range("search3").Value

Set mySheet = Sheets("Sheet1")
Range("A6").Value = "Company"
Range("B6").Value = "Address"
Range("C6").Value = "Contact"

RowCount = 7
Set ie = New InternetExplorer
ie.Visible = True
With ie
.Visible = True
.navigate (myWebsite)

Do While .Busy Or .readyState <> 4
    DoEvents
Loop

ie.Document.getElementById("search").Value = mySearch1
ie.Document.getElementById("selRegion").Value = mySearch2
ie.Document.getElementsByClassName("searchBtn")(0).Click

Do While .Busy Or _
    .readyState <> 4
    DoEvents
Loop

For Each ele In .Document.all
    Select Case ele.className
    Case "result_title"
    RowCount = RowCount + 1
    Case "cname"
    mySheet.Range("A" & RowCount) = ele.innerText
    Case "addy_wrapper"
    mySheet.Range("B" & RowCount) = ele.innerText
    End Select
Next ele
End With

'THIS IS THE CODE THAT IS NOT WORKING
For Each l In ie.Document.getElementsByTagName("a")
    If l.href = "#" And l.onclick = "changePage(3); return false;" Then
        l.Item(3).Click
        Exit For
    End If
Next l

Set ie = Nothing
End Sub
子数据()
Dim ie作为InternetExplorer
作为对象的Dim ele
暗行数与长行数相同
将myWebsite设置为字符串、mySearch1设置为字符串、mySearch2设置为字符串、mySearch3设置为字符串
作为HTMLDocument的Dim文档
myWebsite=范围(“网站”)。值
mySearch1=范围(“搜索1”)。值
mySearch2=范围(“搜索2”)。值
mySearch3=范围(“search3”)。值
设置mySheet=Sheets(“Sheet1”)
范围(“A6”).Value=“公司”
范围(“B6”).Value=“地址”
范围(“C6”).Value=“触点”
行数=7
Set ie=新的InternetExplorer
可见=真实
与ie
.Visible=True
.浏览(我的网站)
请稍等片刻。忙碌或。准备就绪状态4
多芬特
环
ie.Document.getElementById(“搜索”).Value=mySearch1
ie.Document.getElementById(“selRegion”).Value=mySearch2
ie.Document.getElementsByClassName(“searchBtn”)(0)。单击
忙的时候做,忙的时候做_
.readyState 4
多芬特
环
对于文档中的每个元素。全部
选择Case ele.className
案例“结果与标题”
RowCount=RowCount+1
案例“cname”
mySheet.Range(“A”&RowCount)=ele.innerText
案例“addy_包装器”
mySheet.Range(“B”&RowCount)=ele.innerText
结束选择
下一个ele
以
'这是不起作用的代码
对于ie.Document.getElementsByTagName(“a”)中的每个l
如果l.href=“#”和l.onclick=“changePage(3);返回false;”则
l、 第(3)项。点击
退出
如果结束
下一个l
设置ie=无
端接头
[编辑:我现在有了一个解决方案,代码已被替换。-RDH]

首先,我想指出,如果以这种方式检索的数据用于商业目的或个人用途以外的任何用途,那么它违反了凯利蓝皮书(kbb.com)服务条款的两个部分

仅供参考:收集、更新和维护蓝皮书或MLS等数据的网站非常认真地对待自己的数据,他们不喜欢人们将其删除。我和我的一位老同学聊天,她有计算机科学学位,现在是一名房地产经纪人。我向她提到能够从MLS中获取住房数据有多酷,她差点对我发火。只是说:人们是为创造这些数据而获得报酬的,人们是利用这些数据谋生的。”努夫说。 我能够通过在自己的服务器上创建一个网页来运行问题代码,该网页的格式与您所寻找的格式相同,因为我在加拿大时获得了不同版本的bluebook.com网站。我被重定向到kbb.com

+++真正的问题+++

问题是,带有#符号的HREF实际上是完整的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

只是检查一下,但您是否尝试过导航或导航2而不是单击方法?我迫不及待地想明天试试这个!不,我不熟悉导航。你有一个例子吗?我以前用VBA编程过,但这是我第一次尝试通过VBA引发Web点击/事件。以下是有关导航方法的文档,稍后我将尝试查找一些示例代码:Rick,谢谢。我将研究导航方法。假设我可以使用它,您认为给定html代码,我的条件语句正确吗?如果你能提供一些很有帮助的例子的话,看起来这是可行的。我需要更多的示例代码,但我会看看是否可以将其组合在一起。基于其他一些代码,请看这个使用XMLHTTP而不是浏览器控件的示例:以及另一个StackOverFlow问题:我还没有尝试过这种方法,但我一回到家就会尝试。我明天会尝试检查,但我的5yo病了,所以我不会有太多的计算机时间。看起来很好的代码,但你只是缺少了一些小东西。老实说,我不做网页抓取,但我觉得在得到页面文本后,剩下的只是字符串操作,但我确信这过于简化了。瑞克-正如我之前所说,任何帮助都是非常感谢的。但一定要先照顾好那个5yo。我的东西可以等他好了再说。谢谢。我现在就要花一个小时,但明天我可能会在这上面浪费一天的时间。我讨厌我不能解决VBA问题。虽然这很可能是一个DOM问题。您必须登录该站点才能检索数据吗?我可以为search1、search2和search3使用哪些值?无需登录。我只使用过search1(公司)和search2(地区)。出于测试目的,我一直在设置Search1=“楼宇维护承包商”,Search2=“新泽西北部”。结果应该给你7页。我一直无法超越第一页。我相信我得到了一个不同的网站,因为我在加拿大。我被重定向到kbb.com,HTML元素完全不同。当我看到你的最后一篇文章时,我正要发布一个部分解决方案。例如,当我只在屏幕底部的主搜索框中使用Search1时,我只得到2辆福特卡车。但是,我将尝试让它工作并从多个页面检索信息。Rick-我的代码在我的Excel版本和美国版本的Bluebook上工作。我唯一不能做的就是让它点击第2页,共7页,第3页,共7页,等等。换句话说,我的问题不在于搜索。我的问题是换页。很抱歉回答得太多了
' 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