vba ie.navigate不起作用

时间:2015-01-07 06:12:29

标签: vba internet-explorer

我需要使用VBA导航到一个页面。我创建了下面的代码,它工作得很好,直到我重新安装Windows。我不知道这是不是原因,但它不再起作用了。

有案例:

  1. 如果我在运行宏

    之前没有登录

    第一部分,用于登录页面正常,但当我尝试导航到" http://cltd.ro/catalogsearch/result/?q=60041"时,我收到错误"方法'导航& #39;对象' IWebBrowser 2'失败"

  2. 如果我已登录该网站

    另一方面,如果我在运行宏之前已经登录,那么代码正常工作,我到达了所需的页面,但是代码进入了循环" Do / DoEvents / Loop until ie.readystate = 4"永远,我无法继续

  3. 请帮忙! 谢谢!

    Sub xx()
    
        Dim ie As Object
        Set ie = CreateObject("internetexplorer.application")
    
        ie.Visible = True
        AppActivate ie
        apiShowWindow ie.hwnd, 3
        ie.Visible = True
        ie.navigate "http://cltd.ro/customer/account/login/"
        Do
        DoEvents
        Loop Until ie.readystate = 4
    
        On Error Resume Next    'in case I'm already loggen in
        Call ie.Document.getElementById("email").setattribute("value", "dfgsdfg")   'not real value ;-)
        Call ie.Document.getElementById("pass").setattribute("value", "dfgsdfg")    'not real value ;-)
        Call ie.Document.getElementById("send2").Click
        Do
        DoEvents
        Loop Until ie.readystate = 4
        On Error GoTo 0         'cancels the resume next
    
        Application.Wait (Now() + TimeValue("0:00:02"))
    
        link = "http://cltd.ro/catalogsearch/resuilt/?q=60041"
        ie.navigate link
        Do
        DoEvents
        Loop Until ie.readystate = 4
    
    'Other lines of code ...............
    
    End Sub
    

1 个答案:

答案 0 :(得分:0)

这不能回答你的实际问题,但是:

(1)在“等到文档准备就绪”循环中,您应始终处于超时状态。否则,如果页面没有准备好,那些循环可以永远等待。事实上,当我尝试手动导航(通过IE网址栏)到“http://cltd.ro/customer/account/login/”时,它会在那里旋转很长一段时间,直到我放弃并停止。您的代码应检测文档过于准备的情况,并回复“网站未响应60秒,您是否要继续等待?[是] [否]”。

(2)您不允许页面 准备好的情况,但它不是您想要的页面。例如,如果网站返回错误,或者IE决定将其计时,您将获得一个页面,其网址为“res:// ...” - 而不是您实际要求的页面。你不能只是假设你确实得到了正确的页面。

因此,您现有的代码可以用于1-off脚本,但对于正确的生产用途而言不够强大。