PDA

Vollständige Version anzeigen : Weblogin per VBA für 3 Seiten (Registerkarten) in 1 Fenster


marcusdemny
19.07.2012, 10:27
Hallo zusammen

Ich habe ein großes Problem.

Ich möchte 3 Web-Logins in einem Fenster aber 3 Registerkarten.

Die Register gehen auf.
Im ersten werden die Login-Daten eingetragen aber in den anderen kommt ein Fehler.
Kann mir einer helfen.

hier mein bisheriger Code

Sub Nowcast()
Dim WebBrowser1 As Object
Dim i As Integer, AktValue As String

Set WebBrowser1 = CreateObject("InternetExplorer.Application")
WebBrowser1.Visible = True
WebBrowser1.navigate "https://www.nowcast.de/linetspot/"
While WebBrowser1.ReadyState <> 4
'Warten, bis Seite geladen ist
Wend
WebBrowser1.document.all("username").Value = "Name"
WebBrowser1.document.all("password").Value = "passwort"
WebBrowser1.document.all("Submit").Click

WebBrowser1.Navigate2 "http://www.weather-consult.com/", 2048
While WebBrowser1.ReadyState <> 4
'Warten, bis Seite geladen ist
Wend
WebBrowser1.document.all("username").Value = "Name"
WebBrowser1.document.all("passwrd").Value = "Passwort"
WebBrowser1.document.all("submit").Click

WebBrowser1.Navigate3 "http://claimmanager.gfk.com/(S(suucrz45wngorpqdfxnnmofk))/default.aspx"
While WebBrowser1.ReadyState <> 4
'Warten, bis Seite geladen ist
Wend
WebBrowser1.document.all("user_name").Value = "Name"
WebBrowser1.document.all("user_password").Value = "Passwort"
WebBrowser1.document.all("loginButton").Click

End Sub

R J
19.07.2012, 12:22
Hi Benny,

1.
Navigate2 und Navigate3 sind keine Objekte des Webbrowser. Die kann er folglich nicht kennen. Navigate ist eine Methode, die zur angegebenen Adresse 'navigiert'.
Der Aufruf kann also nur lauten: WebBrowser1.Navigate Adresse
Wenn Du also weitere Registerkarten hinzufügen willst, musst Du sie dem Browser erst einmal hinzufügen. Wie das geht, kann ich Dir im Moment auch nicht sagen, aber das kannst Du ja u.U. googeln.

2.
Ist zu überlegen, ob Du überhaupt 3 Registerkarten brauchst. Führe die notwendigen Operationen nacheinander aus (evtl. auszulesende Werte zwischenspeichern und in der nächsten Website entsprechend einfügen)

3.
Hab mir mal die Webseiten angesehen. Du verwendest z. Teil falsche Objektnamen. In der 3. Seite (claimmanager) heißen die z. Bsp.:
WebBrowser1.document.all("user_name").Value = "Name"
WebBrowser1.document.all("user_password").Value = "Passwort"
WebBrowser1.document.all("loginButton").Click

In der 2. (weather):
WebBrowser1.document.all("username").Value = "Name"
WebBrowser1.document.all("password").Value = "passwort"
WebBrowser1.document.all("login_bt").Click

4.
Namen und Passwörter müssen natürlich für die jeweiligen Seiten korrekt sein. Auch eine Fehlerbehandlung wäre vorteilhaft. Hänge Dir hier mal ein Bsp., allerdings mit nur einer Registerkarte an:

Dim WebBrowser1 As Object

Sub Nowcast()
On Error GoTo Fehler

Dim i As Integer, AktValue As String

Set WebBrowser1 = CreateObject("InternetExplorer.Application")
WebBrowser1.Visible = True
WebBrowser1.Navigate "https://www.nowcast.de/linetspot/"
warten

WebBrowser1.document.all("username").Value = "Test"
WebBrowser1.document.all("password").Value = "test"
WebBrowser1.document.all("Submit").Click
warten

WebBrowser1.Navigate "http://www.weather-consult.com/", 2048
warten

WebBrowser1.document.all("username").Value = "Name"
WebBrowser1.document.all("password").Value = "passwort"
WebBrowser1.document.all("login_bt").Click

WebBrowser1.Navigate "http://claimmanager.gfk.com/(S(suucrz45wngorpqdfxnnmofk))/default.aspx"
warten

WebBrowser1.document.all("user_name").Value = "Name"
WebBrowser1.document.all("user_password").Value = "Passwort"
WebBrowser1.document.all("loginButton").Click

warten

'spätestens am Ende aller Aktionen sollte das Objekt wieder aus dem Speicher entfernt werden!
Set WebBrowser1 = Nothing
Exit Sub

Fehler:
MsgBox ("Fehler")
WebBrowser1.Quit
Set WebBrowser1 = Nothing
End Sub

Sub warten()
Do While WebBrowser1.Busy
Loop
Do While WebBrowser1.document.readyState <> "complete"
Loop
End Sub

marcusdemny
19.07.2012, 13:20
Hey RJ,

vielen Dank.

es funktioniert zwar, dass ich mich in allen drei Seiten anmelden kann aber ich möchte auch alle drei Seiten parallel in einem Fenster geöffnet lassen.

In deiner Formel bleibt nur eines offen.

marcusdemny
19.07.2012, 14:27
Hatte noch vermutet, dass das Makro zu schnell ist und der IE noch nicht bereit ist. Aber selbst wenn ich eine Wartezeit einbaue trägt er in der zweiten Registerkarte die Daten nicht ein.

Aber zumindest wird die zweite Seite auch in einer zweiten Registerkarte gestartet.

IngGi
19.07.2012, 14:57
Hallo Marcus,

in mehreren Tabs browsen geht so:

<blockquote><div style='background-color: #F2F2FF; border: 1px solid #3300B2; padding: 0px 24px;'><pre style='font-size: 12px; padding: 0px 10px;'><span style="color: #0000FF">Set</span> WebBrowser1 = CreateObject<span style='color: #B200CC;'>(</span><span style='color: #CC9900;'>"InternetExplorer.Application"</span><span style='color: #B200CC;'>)</span><br>WebBrowser1.Visible = <span style="color: #0000FF">True</span><br><br>WebBrowser1.Navigate <span style='color: #CC9900;'>"http://www.google.de"</span><br>WebBrowser1.Navigate2 <span style='color: #CC9900;'>"http://www.microsoft.com"</span>,<span style="color: #FF0000"> 2048</span><br>WebBrowser1.Navigate2 <span style='color: #CC9900;'>"http://www.wikipedia.de"</span>,<span style="color: #FF0000"> 2048</span><br></pre><hr style='color: #3300B2; background: #3300B2; height: 1px;'><p style='font-size: 8px; font-family: Verdana; text-align: right;'>VBA/HTML - CodeConverter für Excelforen<br>AddIn für Excel XP+2003 - komplett in VBA geschrieben von IngGi<br>Anbindung an VBE-Kontextmenü geklaut ;-) bei: <a href='http://www.cpearson.com/excel/VbeMenus.aspx'>http://www.cpearson.com/excel/VbeMenus.aspx</a></p></div></blockquote>

Siehe dazu auch http://msdn.microsoft.com/en-us/library/aa768360.aspx

Gruß Ingolf

marcusdemny
19.07.2012, 15:13
Das habe ich in meiner Formel,
schon in der zweiten Registerkarte werden keine Logindaten eingetragen und es kommt ein Fehler.

_anton_
20.07.2012, 15:20
Hallo Marcus,

probier sowas:
Sub b()
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = True
objIE.Navigate "https://www.nowcast.de/linetspot"
objIE.Navigate2 "http://claimmanager.gfk.com/(S(suucrz45wngorpqdfxnnmofk))/default.aspx", 2048
objIE.Navigate2 "http://www.weather-consult.com", 2048
Do: Loop Until objIE.Busy = False
Do: Loop Until objIE.Busy = False
Do: Loop Until objIE.document.ReadyState = "complete"
Application.Wait (Now + TimeValue("0:00:10"))
Set objShell = CreateObject("Shell.Application")
For Each win In objShell.Windows
If InStr(1, UCase(win.FullName), "IEXPLORE") > 0 Then
Set doc = win.document
Do: Loop Until doc.ReadyState = "complete"
If InStr(1, win.locationurl, "www.nowcast.de") <> 0 Then
doc.all("username").Value = "Name"
doc.all("password").Value = "passwort"
doc.all("Submit").Click
ElseIf InStr(1, win.locationurl, "www.weather-consult.com") <> 0 Then
doc.all("username").Value = "Name"
doc.all("password").Value = "passwort"
doc.all("login_bt").Click
ElseIf InStr(1, win.locationurl, "claimmanager.gfk.com") <> 0 Then
doc.all("user_name").Value = "Name"
doc.all("user_password").Value = "Passwort"
doc.all("loginButton").Click
End If
End If
Next
Set objIE = Nothing
End Sub

mfg Anton

marcusdemny
23.07.2012, 08:17
Hey Super. vielen vielen Dank.

Das funktioniert genau so wie ich es wollte.

marcusdemny
23.07.2012, 11:06
Hi ich habe doch mal noch eine Frage.

Ist es möglich, dass der Code vorher prüft ob vielleicht eine der Seiten bereits geöffnet und angemeldet ist. Sollte das der Fall sein, dann müsste die Seite vorher geschlossen werden.

EarlFred
23.07.2012, 11:46
Hallo Name?,

schau mal hier:

Laufende Instanzen des Internet Explorers ermitteln (http://msdn.microsoft.com/de-de/library/bb979538.aspx)
(Hinweis zum Setzen der Verweise beachten oder alternativ Änderung auf Late Binding!)
Anstelle die Titelzeile in der MsgBox auszugeben diese auf Übereinstimmungsmerkmale hin prüfen und bei Bedarf objShellWindow mittels Quit beenden.

Grüße
EarlFred

marcusdemny
25.07.2012, 07:22
Hallo Leute, ich muss leider das Thema nochmal öffnen, weil ich ein Problem festgestellt habe.

Nachdem ich für meine Kollegen die Sache etwas vereinfacht habe und jeder seine Zugangsdaten über eine Exceltabelle eingeben kann, kommt es nun bei ein paar Kollegen zu einer Fehlermeldung Laufzeitfehler 438.

Beim größten Teil funktioniert dies jedoch ohne Problem. Der Fehler wird an folgender Stelle ausgespuckt.

Sub Nowcast()
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = True
objIE.Navigate "https://www.nowcast.de/linetspot"
objIE.Navigate2 "http://claimmanager.gfk.com", 2048
objIE.Navigate2 "http://www.weather-consult.com", 2048
Do: Loop Until objIE.Busy = False
Do: Loop Until objIE.Busy = False
Do: Loop Until objIE.document.ReadyState = "complete"
Application.Wait (Now + TimeValue("0:00:08"))
Set objShell = CreateObject("Shell.Application") For Each win In objShell.Windows
If InStr(1, UCase(win.FullName), "IEXPLORE") > 0 Then
Set doc = win.document
Do: Loop Until doc.ReadyState = "complete"
If InStr(1, win.locationurl, "www.nowcast.de") <> 0 Then
doc.all("username").Value = ActiveSheet.Cells(7, 5).Value
doc.all("password").Value = ActiveSheet.Cells(7, 7).Value
doc.all("Submit").Click
ElseIf InStr(1, win.locationurl, "www.weather-consult.com") <> 0 Then
doc.all("username").Value = ActiveSheet.Cells(11, 5).Value
doc.all("password").Value = ActiveSheet.Cells(11, 7).Value
doc.all("login_bt").Click
ElseIf InStr(1, win.locationurl, "claimmanager.gfk.com") <> 0 Then
doc.all("user_name").Value = ActiveSheet.Cells(9, 5).Value
doc.all("user_password").Value = ActiveSheet.Cells(9, 7).Value
doc.all("loginButton").Click
End If
End If
Next
Set objIE = Nothing
Application.Wait (Now + TimeValue("0:00:05"))
Application.Quit
End Sub


Habe auch schon mit einem unserer Systemadmins gesprochen, der konnte mir da jedoch leider auch nicht helfen.

Kennt jemand diesen Fehler und kann mir sagen, was die Ursache dafür ist.

marcusdemny
07.08.2012, 09:19
Kann das ggf. auch an einer anderen Legitimation für das System liegen?