Search code examples
vbainternet-explorerwebautomation

Why I can programmatically access only the first loaded page?


I have very weird issue with some VBA code. The code is InternetExplorer automation and it's really simple: I just need to load page, enter credentials and click on the button on another page (after successful login).

But... My code is not working (but only on one of my machines on AWS). On my local machine this code works fine.

The weird thing is that it seams I have access only to the Document property of the first loaded page (where I need to enter login/password). I mean from MyBrowser.Document property I can see all INPUT fields when I load start page. But after successful login (the IE window is visible) I see same INPUT fields from MyBrowser.Document property! Also (as I said) I have no issues with this code on another maching.

IE Protected mode is disabled (this is IE 11). I think this is some kind of security issue but I can't locate it by myself...

Here is my code:

'MyBrowser is IE instanse 
'Here I'm loading start page and input login/password
'Next the browser show me another page where I need to click a button
'But Debug messages show me input fields for the first Form!

Application.Wait (Now + TimeValue("0:00:05"))
    Do
    DoEvents
    Loop Until MyBrowser.ReadyState = READYSTATE_COMPLETE

Set HTMLDoc = MyBrowser.Document
For Each myHTML_Element In HTMLDoc.getElementsByTagName("INPUT")
If myHTML_Element.Type = "submit" And myHTML_Element.Name = "BUTTONNEWJOBS" Then myHTML_Element.Click: Exit For
Debug.Print myHTML_Element.Name
Next

UPDATE I don't know why but my browser object is always Busy that's why I get old page HTML. I tried to .Stop it but with no luck.


Solution

  • I don't have answer for IE11 automation, just a hint for a path you may choose to walk.

    Another Stack Overflow question Getting source of a page after it's rendered in a templating engine? provides some browser automation options.

    One of the mentioned tool has currently broken support for IE11 due to a IE11 behavior change, see http://docs.seleniumhq.org/about/platforms.jsp#browsers. The blocking issue has some configuration hints you may find useful.

    In my opinion Internet Explorer was ALWAYS the least reliable tool both from the point of view of rendering compatibility, programmability and even the automation problems accross different versions. And although it had improved over the years Internet Explorer is still better to be avoided (from programmer's point of view). Today it is luckily not the only tool available.

    So if you just need to get the work done, there are other browsers or browser-like tools that you can use.

    If you MUST use IE then you should get your answer at the Internet Explorer Dev Center → Community → Developer forums

    EDIT (after comments)

    By the symptoms in your question it looks like the browser object is busy because of some dialog box (perhaps a security prompt) is being show to the user. Some links from Google that may help:

    Rewriting ~1000 lines of code to use another automation interface (or browser) and asking for help at the Microsoft's Internet Explorer Dev Center are IMO still valid options