You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle更新后IE环境下VBA调用APEX登录按钮失效求助

问题描述

通过VBA结合Internet Explorer实现Excel与Oracle APEX的自动化交互,Oracle更新后原代码失效:

  • 原登录按钮HTML:<a href="javascript:apex.submit({request:'LOGIN'});">Connexion</a>
  • 原VBA代码通过遍历<a>标签匹配innerHTML为Connexion的元素并点击,现在该操作无效,且直接在IE中鼠标也无法与按钮交互,疑似Oracle更新导致IE无法正常识别或触发该按钮的JavaScript逻辑。
解决方案建议

1. 直接执行目标JavaScript代码,绕过元素点击

既然按钮的核心逻辑是调用apex.submit({request:'LOGIN'}),可以跳过点击元素的步骤,直接在IE的JS环境中执行该代码:

Set ie = New InternetExplorerMedium
ie.Visible = True
ie.Navigate "ToMyURL"

' 等待页面完全加载
Do While ie.Busy Or ie.ReadyState <> 4
    DoEvents
Loop

' 等待APEX对象初始化完成(避免JS未加载完成报错)
Do While ie.Document Is Nothing Or IsNull(ie.Document.parentWindow.apex)
    DoEvents
    Application.Wait Now + TimeValue("00:00:01")
Loop

' 直接执行登录逻辑
ie.Document.parentWindow.execScript "apex.submit({request:'LOGIN'});", "JavaScript"

2. 匹配元素的href属性而非innerHTML

可能Oracle更新后元素的innerHTML存在细微变化(如空格、换行),可通过匹配href属性中的关键JS代码定位元素:

Set ie = New InternetExplorerMedium
ie.Visible = True
ie.Navigate "ToMyURL"

Do While ie.Busy Or ie.ReadyState <> 4
    DoEvents
Loop

Set idoc = ie.Document
Set ElementCol = idoc.getElementsByTagName("a")
For Each Link In ElementCol
    ' 匹配href中包含的登录请求代码
    If InStr(Link.href, "apex.submit({request:'LOGIN'})") > 0 Then
        ' 优先尝试直接执行href中的JS,若点击无效
        ie.Document.parentWindow.execScript Replace(Link.href, "javascript:", ""), "JavaScript"
        Exit For
    End If
Next Link

3. 强制设置IE文档模式为IE11

Oracle更新后可能不再兼容低版本IE文档模式,可在VBA中强制设置文档模式:

Set ie = New InternetExplorerMedium
' 导航前设置文档模式为IE11
ie.DocumentMode = 11
ie.Visible = True
ie.Navigate "ToMyURL"

' 后续执行元素定位或JS代码逻辑...

4. 检查页面元素状态

直接在IE中按F12打开开发者工具,检查该<a>元素:

  • 查看是否存在disabled属性或pointer-events: none的CSS样式,导致无法交互
  • 检查是否有上层透明元素遮挡按钮,若有可尝试直接触发底层JS逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 00:52:50