【问题标题】:Respond to Website Message Box by Automating InternetExplorer with VBA通过使用 VBA 自动化 InternetExplorer 来响应网站消息框
【发布时间】:2011-01-12 02:06:12
【问题描述】:

我正在像这样在 Excel VBA 中自动化 ie,部分

Set ie = CreateObject("InternetExplorer.Application")

With ie
    .navigate "http://www.statspass.com/login.asp"
    Do While .Busy: DoEvents: Loop
    Do While .readyState <> 4: DoEvents: Loop

    With .document.forms(0)
        .txtUsername.Value = "username"
        .txtPassword.Value = "*****"
        .submit
    End With

稍后在代码中,我导航到不同的 url 并获取一些数据。昨天这一切都很好。今天,当它到达“提交”行时,网站会显示一个消息框,上面写着“正在注销另一个会话”。我设置了 ie.Visible = True 并逐步通过代码来解决这个问题。如所写,消息框未显示。当显示消息框时,它位于页面上,并且 .Busy(上面未显示)始终为真,因此代码只是在循环中坐在那里。

当 ie.Visible = False 时,没有消息框(如我所料),代码没有被挂起,但在下一次 Navigate 方法调用中,它最终回到登录页面(因为它不是正确登录),我在尝试访问登录屏幕上不存在的某些表时遇到错误。

我需要登录这个网站,导航到某个页面,并从表格中获取信息。根据我的代码现在的位置,我想弄清楚如果该消息框存在以及何时存在,如何对它说 OK。但如果我需要退后一步考虑其他方法,我并不反对。

不太重要,但仍然困扰着我,为什么这段代码昨天有效?我对其进行了测试,并将其发送给报告了这些错误的客户,而今天我收到了这些错误。

【问题讨论】:

    标签: internet-explorer vba


    【解决方案1】:

    当我遇到类似情况时,我能够通过执行 JavaScript 来解决此问题,在执行将调用警报的操作之前,将确认函数替换为仅返回 true 的函数。

    oldConfirm = window.confirm; 
    window.confirm = function (msg) { return true; };
    

    如果您想将所有内容恢复原样,则可以执行以下操作...

    window.confirm = oldConfirm; 
    oldConfirm = undefined; 
    

    至于为什么这应该是必要的,当你的代码以前没有它工作时,恐怕我不知道。我总是需要 Rails/Cucumber/Selenium/Firefox 这个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多