2011-01-12 10 views
1

Ich bin wie dies zB in Excel VBA zu automatisieren, teilRespond to Website Message Box von mit VBA automatisieren Internetexplorer

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 

später im Code, navigiere ich auf eine andere URL und einige Daten bekommen. Das alles hat gestern gut funktioniert. Heute, wenn die Zeile "Senden" angezeigt wird, zeigt die Website ein Meldungsfeld mit der Meldung "Eine andere Sitzung wird abgemeldet" an. Ich setze ie.Visible = True und gehe durch den Code, um das herauszufinden. Wie geschrieben, wird das Meldungsfeld nicht angezeigt. Wenn das Meldungsfeld angezeigt wird, sitzt es auf der Seite und die .Busy (nicht oben gezeigt) ist immer wahr, so dass der Code nur dort in einer Schleife sitzt.

Wenn ie.Visible = False ist, gibt es kein Meldungsfeld (wie ich erwarten würde), der Code wird nicht gehalten, aber beim nächsten Navigate-Methodenaufruf landet er wieder auf der Anmeldeseite (weil es ist noch nicht richtig angemeldet) und bekomme eine Fehlermeldung, wenn ich auf bestimmte Tabellen zugreifen möchte, die auf dem Anmeldebildschirm nicht vorhanden sind.

Ich muss mich auf dieser Website anmelden, zu einer bestimmten Seite navigieren und Informationen aus einer Tabelle abrufen. Basierend darauf, wo sich mein Code gerade befindet, möchte ich herausfinden, wie man OK zu diesem Nachrichtenfeld sagt, wenn und wenn es existiert. Aber wenn ich zurücktreten und alternative Methoden in Betracht ziehen muss, bin ich nicht abgeneigt.

Weniger wichtig, aber immer noch nervt mich, warum hat dieser Code gestern funktioniert? Ich habe es getestet, es an einen Kunden geschickt, der diese Fehler gemeldet hat, und heute bekomme ich die Fehler.

Antwort

2

Wenn ich ähnliche Situationen festgestellt habe, konnte ich das Problem umgehen, indem JavaScript ausgeführt wurde, um die Bestätigungsfunktion durch eine Funktion zu ersetzen, die einfach true zurückgibt, bevor die Aktion zum Aufrufen der Warnung ausgeführt wird.

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

Wenn Sie alles wollen zurück setzen, wie es war später, können Sie dann führen Sie den folgenden ...

window.confirm = oldConfirm; 
oldConfirm = undefined; 

Wie, warum dies erforderlich sein sollte, wenn Ihr Code gearbeitet, ohne es vorher Ich fürchte, ich habe keine Ahnung. Ich brauche das aber immer mit Rails/Cucumber/Selenium/Firefox.