【问题标题】:How to navigate back after clicking on a link?点击链接后如何返回?
【发布时间】:2017-10-12 19:56:25
【问题描述】:

我对在 vba 中使用 IE 非常陌生,因此有时我很难纠正我在编写任何代码以从网络上抓取数据时所犯的任何错误。我已经编写了一些代码来单击标题 Microsoft computer training videos 下的 20 个链接中的每个视频链接,该标题位于其首页。我希望单击每个链接,然后返回并重复该过程,直到单击所有链接。我在爬虫中定义的类名和标签名是准确的。我需要做的就是以正确的方式执行该过程。此时,我的爬虫正在单击 20 个链接中的最后一个链接,然后卡在它到达的地方,但没有返回。

这是我到目前为止写的。

Sub clicking_links()

    Const surl As String = "http://www.wiseowl.co.uk/videos/"
    Dim IE As New InternetExplorer, iedoc As HTMLDocument
    Dim posts As Object

    With IE
        .Visible = True
        .navigate surl
        Do Until .readyState = READYSTATE_COMPLETE: Loop
        Set iedoc = IE.document
    End With

    For Each posts In iedoc.getElementsByClassName("woVideoListDefaultSeriesTitle")
        posts.getElementsByTagName("a")(0).Click
    Next posts

End Sub

【问题讨论】:

  • 你可以在Next posts之后使用IE.navigate surl吗?
  • @Victor K,我不明白你在循环后使用IE.navigate surl 的逻辑,因为循环完成后,如果不返回surl 页面,就无处可去。
  • 嗯,你说你希望它在循环后导航回来。我将其解释为导航到起点。那么你希望它在循环之后去哪里?
  • 它只点击最后一个链接,并在 20 个链接中卡住,而不是 20 个链接。
  • 尝试等待每次点击后加载

标签: vba excel internet-explorer web-scraping click


【解决方案1】:

尝试以下方法:

Sub clicking_links()

    Const surl As String = "http://www.wiseowl.co.uk/videos/"
    Dim newurl as String
    Dim IE As New InternetExplorer, iedoc As HTMLDocument
    Dim posts As Object
    Dim t As Long, i As Long

    With IE
        .Visible = True
        .navigate surl
        Do Until .readyState = READYSTATE_COMPLETE: Loop
        Set iedoc = .document

        For Each posts In iedoc.getElementsByClassName("woVideoListDefaultSeriesTitle")
            t = t + 1 'count the number of posts
        Next posts

        For i = 1 To t
            Debug.Print i
            newurl = iedoc.getElementsByClassName("woVideoListDefaultSeriesTitle")(i - 1).getElementsByTagName("a")(0).href
            Debug.Print newurl

            .navigate newurl
            Do Until .readyState = READYSTATE_COMPLETE: Loop
            Set iedoc = .document
            'here do your stuff within the new url

            .navigate surl 'back to old url
            Do Until .readyState = READYSTATE_COMPLETE: Loop
            Set iedoc = .document
        Next i

    End With
End Sub

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-09
  • 2013-04-20
  • 2014-01-30
  • 1970-01-01
  • 2021-06-20
相关资源
最近更新 更多