Я использую Excel и VBA в сочетании с Selenium, чтобы попытаться войти и получить дату с сайта - PullRequest
0 голосов
/ 08 февраля 2019

Я довольно новичок в использовании VBA и Selenium, и я пытаюсь использовать VBA для входа и входа в систему https://ss3.shipstation.com/ для сбора данных с сайта.У меня проблемы с таргетингом на поля ввода имени пользователя и пароля и вход в систему.

Я пробовал это в Internet Explorer и, приблизившись к тому, чтобы заставить его работать, я обнаружил, что ShipStation плохо работает в Internet Explorer.Вот причина использования Selenium Chrome.

Option Explicit  
Private Chrome As New ChromeDriver

Sub ChromeAuto()

    Chrome.Start: Chrome.get "https://ss.shipstation.com/"

    Do While Chrome.Busy = True Or Chrome.ReadyState <> 4: DoEvents: Loop

    Chrome.Document.getElementById("UserName").Value = "UserName"
    Chrome.Document.getElementById("Password").Value = "Password"
    Chrome.Document.getElementById("btn-login").Value.Click

End Sub

Я ожидаю, что он хотя бы заполнит поля, но возвращает:

'Ошибка выполнения' 438 'Объектне поддерживает это свойство или метод

Как правильно заполнить поля?

1 Ответ

0 голосов
/ 08 февраля 2019

Вам необходим временной цикл (или установить более длительное время ожидания - см. Внизу), чтобы дать время для появления элемента на странице.Я бы также использовал SendKeys для заполнения значений, и вы не можете связать .Value, которое является свойством, вместе с .Click, который является методом.

Selenium Basic имеет свой собственный синтаксис и неявный иявные условия ожидания.Вы пытались использовать синтаксис, используемый с автоматизацией Internet Explorer и обходом документов DOM через MSHTML.Это не сработает здесь.Правильный синтаксис показан ниже.

Option Explicit
Public Sub EnterInfo()
    Dim d As WebDriver, t As Date, ele As Object
    Const MAX_WAIT_SEC As Long = 10
    Set d = New ChromeDriver
    Const URL = "https://ss3.shipstation.com/"
    With d
        .Start "Chrome"
        .get URL
        t = Timer
        Do
            On Error Resume Next
            Set ele = .FindElementById("username")
            On Error GoTo 0
            If Timer - t > MAX_WAIT_SEC Then Exit Do
        Loop While ele Is Nothing
        If ele Is Nothing Then Exit Sub
        ele.SendKeys "abc"
        .FindElementById("password").SendKeys "xyz"
        .FindElementById("btn-login").Click
        Stop '<==delete me later
        .Quit
    End With
End Sub

Я бы посоветовал взглянуть на этот учебник и примеры здесь


Более длительное время ожидания:

Option Explicit
Public Sub EnterInfo()
    Dim d As WebDriver, ele As Object
    Set d = New ChromeDriver
    Const URL = "https://ss3.shipstation.com/"

    With d
        .Start "Chrome"
        .get URL
        Set ele = .FindElementById("username", timeout:=5000)
        If ele Is Nothing Then Exit Sub
        ele.SendKeys "abc"
        .FindElementById("password").SendKeys "xyz"
        .FindElementById("btn-login").Click
        Stop                                     '<==delete me later
        .Quit
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...