VBA code to interact with specific IE window that is already open
上面是使用VBA中的shell应用程序查找并转到已打开的IE实例的线程。找到所需的开放IE实例后,我需要从该IE页面中查询表而不使用其URL。我无法使用其URL的原因是,此IE页面是通用的“结果”页面,在主网站上进行搜索后会在单独的窗口中打开,因此,如果我使用结果页面的URL,即:{ {3}},它将返回错误。是否还有其他方法可以在不使用URL连接的情况下查询表,例如表的“ getElements”?
K.Davis,蒂姆·威廉姆斯:你的假设是正确的。我的代码/项目的第一部分打开了一个搜索页面:objIE.navigate“ https://a836-acris.nyc.gov/DS/DocumentSearch/BBLResult”并通过它提交搜索表单。第二部分(在第一段中已在上面概述)打开了结果页面(弹出窗口)。我正在尝试自动从该页面检索表。我尝试使用QueryTables.Add方法,这是我熟悉的连接到数据/网页的方式,需要URL。如果我使用结果页面中的URL,它将返回错误,因此我正在寻找有关如何进行连接的建议/帮助。那就是说我能够使用'getElements'方法检索页面的元素,但不能查询表。还有其他方法可以使用QueryTables.Add方法连接到数据源,请参见https://a836-acris.nyc.gov/DS/DocumentSearch/BBL,但我对这些其他方法并不熟悉。希望这可以澄清一点。
答案 0 :(得分:0)
我没有遇到任何问题,因为尽管您有一个中间窗口,但最终的IE窗口解析为具有焦点的主要IE窗口。使用指定的搜索参数,我可以使用以下代码获取结果表:
Option Explicit
Public Sub GetInfo()
Dim IE As New InternetExplorer
With IE
.Visible = True
.navigate "https://a836-acris.nyc.gov/DS/DocumentSearch/BBL"
While .Busy Or .readyState < 4: DoEvents: Wend
With .document
.querySelector("option[value='3']").Selected = True
.querySelector("[name=edt_block]").Value = 1
.querySelector("[name=edt_lot]").Value = "0000"
.querySelector("[name=Submit2]").Click
End With
While .Busy Or .readyState < 4: DoEvents: Wend
Dim hTable As HTMLTable
Set hTable = .document.getElementsByTagName("table")(6)
'do stuff with table
.Quit
End With
End Sub
您可以通过剪贴板复制表格。任何刻度线都会显示在正确的位置,但显示为空图标。
对于剪贴板早期绑定,请访问VBE>工具>参考> Microsoft-Forms 2.0对象库。
如果将UserForm添加到项目中,该库将自动添加。
Dim clipboard As DataObject
Set clipboard = New DataObject
clipboard.SetText hTable.outerHTML
clipboard.PutInClipboard
ThisWorkbook.Worksheets("Sheet1").Cells(1, 1).PasteSpecial
后期使用
Dim clipboard As Object
Set clipboard = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")