Question

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.

Was it helpful?

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

OTHER TIPS

Based on your following statement

I see same INPUT fields from MyBrowser.Document property!

it would seem that the page hasn't fully loaded. Perhaps it is loading data via AJAX and clicking the submit button shows the exact same page (which would explain why you were seeing the same INPUT fields) while waiting for a response from the server.

An easy way to test this is to wait for a longer period of time (e.g. 30 seconds) and ignoring the value of the browser ReadyState. However a better way would be looping until you find a element on the successful page that isn't on the first page, with a possible timeout of maybe 30 seconds.

I've used Selenium to do some automation and ran into similar problems and had to resort to using Implicit Waits but I'm not sure if VBA as such a feature (as I don't know VBA)

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top