【问题标题】:VBA Webscrape: Referencing a pop-up webpage tabVBA Webscrape:引用弹出网页选项卡
【发布时间】:2018-04-28 02:40:23
【问题描述】:

我已经在互联网上进行了大量搜索以找到我的问题的答案,尽管它无济于事。我对 VBA Webscraping 相当陌生,所以如果我的问题相当简单,我深表歉意。话虽如此,让我解释一下:

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

我尝试使用 innerText 来查看是否可以直接从 HTML 中提取 url,尽管它似乎并不位于 HTML 中。此外,我无法创建另一个“ie”来指向新的 url,因为新选项卡的 url 是动态的并且基于您的搜索。因此,我认为我离开的唯一可能性是切换标签,但我找不到任何关于如何做到这一点的信息。

如果有人能解决这个难题,我知道这将是 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

【问题讨论】:

  • 您是否尝试过Shell.Application.Windows 并检查 URL 以找到您正在寻找的窗口?这似乎比假设固定索引更安全。
  • 意思是输入“您是否尝试过循环 Shell.Application.Windows 并检查 URL”

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


【解决方案1】:

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

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

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

这是获取新选项卡 IE 实例的可靠且可靠的方法,即使此时正在打开许多其他 HWND 资源管理器窗口。看看this answer,它显示了这种方法。

【讨论】:

    猜你喜欢
    • 2021-08-09
    • 2021-03-25
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    • 2012-06-09
    • 2017-07-11
    • 1970-01-01
    • 2013-10-10
    相关资源
    最近更新 更多