J'ai un code et je veux attendre quelque part au milieu avant d'aller de l'avant . Après WebBrowser1.Document.Window.DomWindow.execscript ("checkPasswordConfirm ();", "JavaScript") .__ attendre 0,5 seconde puis faites le reste du code.
WebBrowser1.Document.Window.DomWindow.execscript("checkPasswordConfirm();","JavaScript")
Dim allelements As HtmlElementCollection = WebBrowser1.Document.All
For Each webpageelement As HtmlElement In allelements
If webpageelement.InnerText = "Sign Up" Then
webpageelement.InvokeMember("click")
End If
Next
Vous devrez utiliser System.Threading.Thread.Sleep (nombre de millisecondes) .
WebBrowser1.Document.Window.DomWindow.execscript("checkPasswordConfirm();","JavaScript")
Threading.Thread.Sleep(500) ' 500 milliseconds = 0.5 seconds
Dim allelements As HtmlElementCollection = WebBrowser1.Document.All
For Each webpageelement As HtmlElement In allelements
If webpageelement.InnerText = "Sign Up" Then
webpageelement.InvokeMember("click")
End If
Next
Je pense que cette question est ancienne mais je donne une autre réponse car elle est utile pour les autres:
thread.sleep n'est pas une bonne méthode pour attendre, car habituellement, le logiciel est figé jusqu'à la fin du temps imparti, cette fonction est meilleure:
Imports VB = Microsoft.VisualBasic
Public Sub wait(ByVal seconds As Single)
Static start As Single
start = VB.Timer()
Do While VB.Timer() < start + seconds
System.Windows.Forms.Application.DoEvents()
Loop
End Sub
cette fonction attend un temps spécifique sans geler le logiciel, mais augmente l'utilisation du processeur, mais la fonction ci-dessous non seulement ne gèle pas le logiciel, mais n'augmente pas non plus l'utilisation du processeur:
Private Sub wait(ByVal seconds As Integer)
For i As Integer = 0 To seconds * 100
System.Threading.Thread.Sleep(10)
Application.DoEvents()
Next
End Sub
Faites une minuterie, qui active le code que vous voulez quand il coche. Assurez-vous que la première ligne du code du minuteur est:
timer.enabled = false
Remplacez la minuterie par ce que vous avez nommé votre minuterie.
Ensuite, utilisez ceci dans votre code:
WebBrowser1.Document.Window.DomWindow.execscript("checkPasswordConfirm();","JavaScript")
timer.enabled = true
Dim allelements As HtmlElementCollection = WebBrowser1.Document.All
For Each webpageelement As HtmlElement In allelements
If webpageelement.InnerText = "Sign Up" Then
webpageelement.InvokeMember("click")
End If
Next
Imports VB = Microsoft.VisualBasic
Public Sub wait(ByVal seconds As Single)
Static start As Single
start = VB.Timer()
Do While VB.Timer() < start + seconds
System.Windows.Forms.Application.DoEvents()
Loop
End Sub
% 20 + utilisation élevée du processeur + pas de décalage
Private Sub wait(ByVal seconds As Integer)
For i As Integer = 0 To seconds * 100
System.Threading.Thread.Sleep(10)
Application.DoEvents()
Next
End Sub
% 0,1 cpu utilisation + retard élevé
Static tStart As Single, tEnd As Single, myInterval As Integer
myInterval = 5 ' seconds
tStart = VB.Timer()
tEnd = myInterval + VB.Timer()
Do While tEnd > tStart
Application.DoEvents()
tStart = VB.Timer()
Loop
J'ai obtenu de meilleurs résultats en vérifiant l'état de lecture du navigateur avant de passer à l'étape suivante. Cela ne fera rien tant que le navigateur n'aura pas un état de lecture "complet"
Do While WebBrowser1.ReadyState <> 4
''' put anything here.
Loop