Как определить, сработал ли автоматический вход в систему с помощью элемента управления WebBrowser? - PullRequest
0 голосов
/ 06 сентября 2018

Я использую элемент управления WebBrowser, чтобы определить, используют ли в списке сайтов свои заводские настройки по умолчанию для имени пользователя и паролей. Однако у меня возникают проблемы, так как DocumentCompleted, который я использую для имитации входа в систему, также вызывается после завершения входа в систему.

Кроме того, когда он работает, он зацикливает и выдает ложные сообщения о том, что несколько других сайтов имеют имя входа по умолчанию.

Я заметил эти проблемы и не могу обернуться вокруг этого днем. Не уверен, что это из-за того, что я устал или парень по ту сторону моего кубика поет каждое другое слово какой-то новой группы, которую он любит.

Если ничего другого, иногда это помогает мне напечатать все и прочитать это на следующий день, и, возможно, мой несколько рабочий источник может помочь кому-то еще в будущем.

Вопросы:

  • Ложные срабатывания по фактическому сайту с использованием учетных данных по умолчанию
  • Останавливает обработку, когда страница 404s или загружает неожиданную страницу

Код:

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

1 Ответ

0 голосов
/ 07 сентября 2018

В DocumentCompleted вы должны проверить, является ли URL-адрес события целевым URL-адресом браузера. Это гарантирует, что код вызывается один раз, после полной загрузки страницы.

Кроме того, вы звоните в систему, но затем снова вводите код, который работает с браузером. Это может привести к нежелательному поведению. Вместо этого у вас должно быть 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 и попробуйте еще раз или перейдите на следующий сайт.

...