Exécutez mon code VBA à partir d'une page Internet Explorer existante (ouverte)
Je voudrais exécuter ma macro VBA sur une page Internet Explorer spécifique que j'ai déjà ouverte et connectée .
C'est parce que je dois d'abord me connecter à mon compte et contourner le code captcha. Je dois envoyer ce message extrêmement répétitif à plus de deux cents personnes au cours de l'année.
Le problème avec ce qui suit est que j'ouvre une toute nouvelle page et que je ne pourrai pas contourner le captcha.
Dim IE As InternetExplorer
Set IE = CreateObject("InternetExplorer.Application")
IE.navigate ("website")
IE.Visible = True
End Sub
Solution
Sub TestGetIE()
Dim IE As Object
'GetIE runs the Functoin we have created below
Set IE = GetIE("website opened in IE here ")
WaitFor IE
end sub
Function GetIE(sLocation As String) As Object
Dim objShell As Object, objShellWindows As Object, o As Object
Dim sURL As String
Dim retVal As Object
Set retVal = Nothing
Set objShell = CreateObject("Shell.Application")
Set objShellWindows = objShell.Windows
For Each o In objShellWindows
'Loop through all the opened internet explorer pages
sURL = ""
'Loops through all the pages opened on internet explorer
'Then we will tell our macro to work on that page
sURL = o.LocationURL
If sURL Like sLocation & "*" Then
Set retVal = o
Exit For
End If
Next o
Set GetIE = retVal
End Function
Réponses
Une chose que vous pouvez faire est de DoEvents jusqu'à ce qu'un certain élément soit présent sur la page. Exécutez votre code pour accéder au site Web, puis faites jusqu'à l'élément après captcha est présent DoEvents. Le code boucle jusqu'à ce que vous soyez connecté au site Web. J'aime utiliser VBA SeleniumBasic ChromeDriver sur GetHub. Cela facilite considérablement la mise au rebut du Web et vous n'avez pas besoin d'utiliser Internet Explorer.
D'après votre description, je comprends que vous souhaitez que l'interaction de l'utilisateur remplisse le captcha, puis que vous souhaitez continuer à automatiser la même page.
Je vous suggère pour les deux étapes d'essayer d'utiliser 2 modules différents et d'utiliser le même objet IE dans les deux modules.
Vous pouvez créer un objet IE global que vous pouvez utiliser dans les deux modules.
Ensuite, pour la partie connexion, exécutez le premier module.
Après cela, l'utilisateur remplira le captcha manuellement.
Exécutez ensuite le deuxième module pour automatiser le reste de la page.
Exemple de code:
Public ie As Object
Sub login()
Set ie = CreateObject("internetexplorer.application")
ie.Visible = True
ie.navigate "Your_web_site_URL_here..."
Do While ie.Busy
Application.Wait DateAdd("s", 1, Now)
Loop
ie.document.getElementById("uname").Value = "user1"
ie.document.getElementById("pswd").Value = "12345"
End Sub
Sub second_part()
ie.document.getElementById("email").Value = "[email protected]"
ie.document.getElementById("age").Value = "30"
End Sub
Code UserForm1:
Private Sub CommandButton1_Click()
Call Module1.login
End Sub
Private Sub CommandButton2_Click()
Call Module1.second_part
End Sub
Production:
Faire appel à cette fonction m'a aidé à le résoudre.
Function GetIE(sLocation As String) As Object
Dim objShell As Object, objShellWindows As Object, o As Object
Dim sURL As String
Dim retVal As Object
Set retVal = Nothing
Set objShell = CreateObject("Shell.Application")
Set objShellWindows = objShell.Windows
For Each o In objShellWindows
'Loop through all the opened internet explorer pages
sURL = ""
'Loops through all the pages opened on internet explorer
'Then we will tell our macro to work on that page
sURL = o.LocationURL
If sURL Like sLocation & "*" Then
Set retVal = o
Exit For
End If
Next o
Set GetIE = retVal
End Function