为什么依赖于Internet的DOM对象是VBA中的Explorer应用程序



所以我有一个InternetExplorer对象,在导航到一个页面后,我用它来获取DOM对象。(事实上,我得到了一组DOM表单对象,但我试图让这个问题尽可能通用。)

Set ie = CreateObject("InternetExplorer.Application")
ie.navigate (URL)
Set DOM = ie.document

然后我想退出,即退出ie.quit,继续使用我的新DOM对象。不幸的是,退出ie似乎清空了dom对象的所有内容。有没有办法阻止这种情况的发生?我真的不想让ie一直打开到程序结束,因为它a)占用了资源,b)在以后发生错误时,往往会导致许多未关闭的实例。谢谢,很抱歉,如果答案真的很明显(感觉可能是这样,尽管我真的四处寻找。)

我认为您不能在持有对象时退出IE。除非我遗漏了什么,否则您持有对COM对象的引用;COM对象不是存储在你的应用程序中,而是由IE管理的,所以当扔掉IE时,你就扔掉了你的对象。

如果您关心资源利用率,我会尝试在尽可能短的时间内保留DOM,但如果您需要访问DOM,则需要保留IE。

如果你只需要部分数据,你当然可以从DOM中提取相关的比特,去掉IE,然后处理你刚刚提取的数据。

DOM位于Internet Explorer进程地址空间中,该地址空间与您的应用程序是分开的。您所拥有的只是外部进程外DOM对象的进程内代理对象。通过执行ie.quit,可以有效地终止IE进程并切断其DOM。

从代码中也不清楚是否在访问DOM之前等待DocumentComplete事件。您当然不能在呼叫Navigate之后立即访问它。

最新更新