我已经在互联网上做了大量的搜索,以找到我的问题的答案,虽然它一直无济于事。我对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
答案 0 :(得分:0)
在IE窗口中打开的每个选项卡都是在一个单独的全新IE实例中创建的,但由于所有选项卡都属于唯一的IE窗口,因此它们与窗口具有相同的HWND。
因此,您可以有条件地计算循环内IE窗口中的选项卡数量,仅为HWND与目标匹配的窗口增加计数器。
以这种方式计算之前启动新标签页的窗口数。然后打开新选项卡,等待窗口数增加1,这意味着创建了选项卡。之后,循环中计算的最后一个IE实例实际上是新选项卡。您可以添加额外的位置检查。
这是获取新选项卡IE实例的防错和可靠方式,即使此时正在打开另一堆HWND浏览器窗口。看一下显示方法的this answer。