VBA Webscrape:引用弹出式网页选项卡

时间:2018-04-26 15:24:50

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

我已经在互联网上做了大量的搜索,以找到我的问题的答案,虽然它一直无济于事。我对VBA Webscraping相当新,所以如果我的问题相当简单,我会道歉。话虽如此,让我解释一下:

我目前正在尝试从我公司的内部网站上提取信息。使用HTML id和类名,我能够引用所需的搜索栏。虽然,一旦脚本单击网页上的搜索按钮,就会打开一个新选项卡。此后,我的脚本的其余部分继续引用原始选项卡,而不是我需要的信息派生自的新选项卡。

我曾尝试使用innerText来查看我是否可以直接从HTML中提取URL,尽管它似乎不在HTML中。此外,我无法创建另一个“ie”来指向新网址,因为新标签的网址是动态的,并且基于您的搜索。因此,我假设我离开的唯一可能是切换选项卡,我无法找到有关如何执行此操作的任何信息。

如果有人能解决这个难题,我知道它将成为StackOverflow的编码之神。

Option Explicit
Sub Atlas_Search()

    Dim SearchString As String
    SearchString = Range("A1")

    Dim ie As Object
    Dim ie2 As Object
    Dim form As Object
    Dim form2 As Object
    Dim form3 As Object
    Dim button As Variant
    Dim var1 As Object

    Set ie = New InternetExplorerMedium
    With ie
    ie.Visible = True
    ie.Navigate 
    "www.google.com"
    With CreateObject("Shell.Application").Windows
    Set ie = .Item(.Count - 1)
    End With
    End With


   ie.document.getelementsbytagname("input")(10).Value = SearchString
   Set form = ie.document.getelementbyid("MainContent_btnSearchFullText")
   form.Click
   Set form2 = 
   ie.document.getelementbyid("MainContent_rptrSearchResults_lnkApplicationid_0")
   form2.Click
   Set form3 = ie2.document.getelementsbyclassname("nav2link")(9)
   form3.Click

End Sub

1 个答案:

答案 0 :(得分:0)

在IE窗口中打开的每个选项卡都是在一个单独的全新IE实例中创建的,但由于所有选项卡都属于唯一的IE窗口,因此它们与窗口具有相同的HWND。

因此,您可以有条件地计算循环内IE窗口中的选项卡数量,仅为HWND与目标匹配的窗口增加计数器。

以这种方式计算之前启动新标签页的窗口数。然后打开新选项卡,等待窗口数增加1,这意味着创建了选项卡。之后,循环中计算的最后一个IE实例实际上是新选项卡。您可以添加额外的位置检查。

这是获取新选项卡IE实例的防错和可靠方式,即使此时正在打开另一堆HWND浏览器窗口。看一下显示方法的this answer