我正在使用WebBrowser控件来确定站点列表是否正在使用其出厂默认的用户名和密码。但是,一旦登录完成,我用来模拟登录的DocumentCompleted也会遇到麻烦。
此外,当它运行时,它还会循环生成并报告其他几个站点具有默认登录名的错误报告。
我注意到了这些问题,今天下午无法解决这个问题。不知道是因为我累了还是我立方的另一边的那个家伙唱了他喜欢的某个新乐队的其他单词。
如果别无所求,有时它可以帮助我将所有内容输入第二天并阅读,也许我的工作资料可以帮助其他人。
问题:
代码:
Private Sub frmMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load
WebBrowser.Navigate(linqData(i).URL)
End Sub
Private Sub WebBrowser_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser.DocumentCompleted
' Check for Default Login
Login("administrator", "password")
' Determine Results
If WebBrowser.Url.ToString.Contains("index.php") Then
' Successfully Logged In
LogData("Successfully Logged In to " & linqData(i).Name)
NextSite()
ElseIf WebBrowser.Url.ToString.Contains("loginfailed.php") Then
' Failed to Login
NextSite()
End If
End Sub
Sub Login(Username As String, Password As String)
Dim FoundUsernameTextbox As Boolean = False
Dim FoundPasswordTextbox As Boolean = False
Try
' Find Username Textbox
Try
WebBrowser.Document.GetElementById("nameInput").InnerText = Username
FoundUsernameTextbox = True
Catch ex As Exception
End Try
' Find Password Textbox
Try
WebBrowser.Document.GetElementById("pass").InnerText = Password
FoundPasswordTextbox = True
Catch ex As Exception
End Try
' Find Login Button and Click
Try
If FoundUsernameTextbox And FoundPasswordTextbox Then
WebBrowser.Document.GetElementById("submit").InvokeMember("click")
End If
Catch ex As Exception
End Try
Catch ex As Exception
End Try
End Sub
Sub NextSite()
Try
i += 1
If i < linqDataRecordCount Then
WebBrowser.Navigate(linqData(i).URL)
Else
LogData("Finished at " & DateTime.Now)
End If
Catch ex As Exception
End Try
End Sub
答案 0 :(得分:1)
在DocumentCompleted中,您应该检查事件url是否为浏览器的目标url。这样可以确保在页面完全加载后调用一次代码。
此外,您正在调用Login(登录),然后再次进行处理浏览器的代码。这可能会导致不良行为。您应该改用Else,然后尝试在那里登录。
If e.Url = WebBrowser.Url Then
' Determine Results
If WebBrowser.Url.ToString.Contains("index.php") Then
' Successfully Logged In
LogData("Successfully Logged In to " & linqData(i).Name)
NextSite()
ElseIf WebBrowser.Url.ToString.Contains("loginfailed.php") Then
' Failed to Login
NextSite()
Else
Login("administrator", "password")
End If
End If
使Login为布尔函数也是一个好主意。如果找不到要调用的登录元素,则返回false,然后重试或转到下一个站点。