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
相关产品推荐
相关产品推荐

