私はコードを持っているので、先に進む前に真ん中のどこかで待ってほしい。 WebBrowser1.Document.Window.DomWindow.execscript( "checkPasswordConfirm();"、 "JavaScript")の後、0.5秒待ってから、残りのコードを実行します。
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
System.Threading.Thread.Sleep(ミリ秒数) を使用する必要があります。
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
私はこの質問は古いと思いますが、他の人にとって役に立つので別の答えを提供します:
thread.sleepは、通常は時間を終えるまでソフトウェアをフリーズするため、待機するのに適した方法ではありません。この関数の方が優れています。
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
この関数は、ソフトウェアをフリーズせずに特定の時間待機しますが、CPU使用率は増加しますが、以下の関数はソフトウェアをフリーズしないだけでなく、CPU使用率も増加しません。
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
タイマーを作成します。タイマーが作動すると、必要なコードがアクティブになります。タイマーのコードの最初の行が以下であることを確認してください。
timer.enabled = false
タイマーは、タイマーの名前に置き換えてください。
次に、コードでこれを使用します。
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 +高CPU使用率+遅延なし
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使用率+高遅延
提案されたコードには欠陥があります。
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
VB.Timer()は、真夜中からの秒数を返します。これが真夜中の直前に呼び出された場合、休憩はほぼ丸1日となります。次のことをお勧めします。
Private Sub Wait(ByVal Seconds As Double, Optional ByRef BreakCondition As Boolean = False)
Dim l_WaitUntil As Date
l_WaitUntil = Now.AddSeconds(Seconds)
Do Until Now > l_WaitUntil
If BreakCondition Then Exit Do
DoEvents()
Loop
End Sub
DoEventsが呼び出されるため、waitloopをキャンセルする必要がある場合、BreakConditionをtrueに設定できます。これはループ外から実行できます。
Threading.Thread.SLeep(2000)
の問題は、VB.Netプログラムで最初に実行されることです。この
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
完璧に働きました。
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
次のステップに進む前に、ブラウザの準備状態を確認することで、より良い結果が得られました。ブラウザが「完全な」準備完了状態になるまで、これは何もしません
Do While WebBrowser1.ReadyState <> 4
''' put anything here.
Loop