【问题标题】:Replacing IE Bits with Edge in VBA在 VBA 中用 Edge 替换 IE 位
【发布时间】:2021-08-12 22:57:11
【问题描述】:

为了为 IE11 的最终“消失”做准备,我一直在尝试找出如何替换我的代码的几个部分。一个涉及启动 IE 并使用该浏览器抓取一些页面。在 Edge 中是否有等效的方法来执行以下操作?我没有看到像使用“Microsoft Internet Objects”和 IE11 那样添加对 Edge 库的引用的方法。

    Dim ie As InternetExplorerMedium: Set ie = New InternetExplorerMedium
    Dim html As HTMLDocument

    With ie
        .Visible = False
        .Navigate website 'string that's created above this code
    End With

    Do While ie.ReadyState <> READYSTATE_COMPLETE
        DoEvents
    Loop
    
    Application.Wait Now + #12:00:10 AM#
    
    Set html = ie.Document

感谢大家的帮助。

【问题讨论】:

  • 微软几年前就停止更新VBA,除非公开创建Edge库,否则VBA只能使用IE进行网页抓取..
  • 您可以使用 SeleniumBasic 用其他浏览器抓取网页,而不是使用 VBA 的 IE。看这里的第一个答案:stackoverflow.com/questions/57216623/…
  • 这是个好建议。但是,我在我的机器上没有管理员权限,也没有 Chrome 浏览器(只有 IE 和 Edge)。

标签: excel vba


【解决方案1】:

好的,一些解释。我写这些作为回复,以免将它们分成几个 cmets。

Edge 是否可以代替 IE 使用 VBA 进行网页抓取?

它不能直接工作。原因是 IE 有一个 COM 接口(@98​​7654321@)。没有其他浏览器有这个界面。连Edge都没有。

但是对于 Edge,还有一个 Selenium 的 Web 驱动程序。 Even provided directly by MS.

另一种选择 - xhr

由于您没有管理员权限而无法使用 Selenium,因此可能有可能使用 xhr (XML HTTP Request)。但是,为了对此发表声明,我们必须知道您要抓取的页面。

Xhr 可以使用directly from VBA,因为它不使用浏览器。最大的限制是只能处理静态内容。不执行任何 JavaScript,因此不会以任何其他方式重新加载或动态生成任何内容。另一方面,此选项比浏览器解决方案要快得多。通常,Web 服务器提供的静态文件就足够了。这可以是 HTML 文件、JSON 或其他数据交换格式。

有许多将 xhr 与 VBA here on SO 结合使用的示例。作为另一种方法,首先要注意这种可能性。我不能在这里详尽地解释这个方法,也是因为我自己并不了解它的一切。但是有很多方法可以使用它。

顺便说一句

IE 最终将在 2022 年 6 月停产,届时也将不再随 Windows 一起提供。这就是我几天前在德国 IT 页面上看到的内容。但是IE的使用已经有了很大的限制。

【讨论】:

  • 非常感谢您的详细解释。我正在使用的网站(不可公开访问)使用 JavaScript/React,所以我不相信 xhr 会起作用(我可能错了)。不过,我会检查 Selenium 选项!
猜你喜欢
  • 2017-01-28
  • 1970-01-01
  • 2020-09-21
  • 1970-01-01
  • 2016-03-29
  • 1970-01-01
  • 2017-01-09
  • 2016-04-15
  • 2023-03-30
相关资源
最近更新 更多