通过VBA自动化InternetExplorer回复网站消息框

时间:2011-01-12 02:06:13

标签: internet-explorer vba

我正在自动化,即从这样的Excel VBA中,部分

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(上面未显示)始终为true,因此代码就位于循环中。

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

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

不太重要,但仍然困扰着我,这就是为什么这个代码昨天起作用了?我测试了它,发送给报告这些错误的客户,今天我收到了错误。

1 个答案:

答案 0 :(得分:2)

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

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

如果你想把所有东西都放回原处,你可以执行以下操作......

window.confirm = oldConfirm; 
oldConfirm = undefined; 

至于为什么这应该是必要的,当你的代码在没有它之前工作时,我恐怕没有任何线索。我总是需要使用Rails / Cucumber / Selenium / Firefox。