You need to enable JavaScript to run this app. 能否不借助驱动与Selenium,通过VBA获取已打开的Edge(非IE)窗口并读取页面内容
优惠活动
大模型
产品
解决方案
定价
更多

能否不借助驱动与Selenium,通过VBA获取已打开的Edge(非IE)窗口并读取页面内容

核心结论

你提出的两个核心需求,完全可以在不下载任何浏览器驱动、不引入Selenium等第三方自动化工具的前提下实现,依托Windows原生COM接口即可完成,和你当年用VBA配合objShell读取IE页面的实现逻辑一脉相承,代码改动量极小。

具体实现路径

1. 获取所有打开的MS Edge窗口列表

这套能力完全复用你熟悉的Shell.Application原生COM机制:

  • 在Windows 10 1809及以上版本,Shell的Windows枚举集合不再只收录IE窗口,会自动纳入所有遵循系统窗口注册规范的应用顶层窗口,包括新版MS Edge
  • 遍历集合时只需增加一层进程名判断,筛选出所属可执行文件为msedge.exe的窗口,即可收集每个Edge窗口的标题、访问URL、窗口句柄等核心信息,形成完整的打开窗口列表
  • 无第三方依赖的示例代码片段:
Dim objShell As Object, targetWin As Object
Dim edgeWindowList As Collection
Set edgeWindowList = New Collection
Set objShell = CreateObject("Shell.Application")

For Each targetWin In objShell.Windows
    ' 精准匹配MS Edge进程所属的窗口
    If InStr(LCase(targetWin.FullName), "msedge.exe") > 0 Then
        ' 收集窗口核心信息存入列表
        edgeWindowList.Add Array( _
            "窗口标题:" & targetWin.LocationName, _
            "页面URL:" & targetWin.LocationURL, _
            "窗口句柄:" & targetWin.hwnd _
        )
    End If
Next

2. 读取指定已打开窗口的页面元素内容

通过上述枚举流程定位到目标Edge窗口并拿到对应的COM引用后,可直接通过窗口对象暴露的Document属性访问页面DOM结构:

  • 操作逻辑和你当年读取IE页面元素完全一致,可直接调用DOM标准方法读取指定元素的文本、属性、节点内容,不需要额外解析组件
  • 例如读取页面中id为mainContent的元素文本,可直接通过targetWin.Document.getElementById("mainContent").innerText完成读取
能力边界说明

这套实现严格匹配你的需求边界,不涉及你不需要的浏览器交互控制类能力:

  • 仅支持读取已加载完成的页面内容,不支持点击按钮、打开新URL、等待动态元素渲染等双向交互类自动化操作
  • 对开启了严格站点隔离、隐私模式或设置了强CSP安全策略的页面,Shell接口会按照系统安全规则限制DOM访问权限,和IE时代受安全策略限制无法读取页面的逻辑完全一致
  • 无需额外安装任何驱动或工具,所有能力都来自Windows系统自带的原生组件
  • 你此前的认知“原生VBA无法实现MS Edge的全流程交互自动化”是完全正确的,这类全流程控制场景确实需要额外组件支持,但你当前提出的两个只读类需求,完全不需要依赖这些组件。

内容的提问来源于stack exchange,提问作者Daniel Barrett

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.11 15:45:02