вход на веб-сайт с использованием vba - un и pw dispsear при нажатии кнопки «Отправить» - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь написать макрос, который будет просто входить на этот веб-сайт.

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

Я пробовал очень много вещей, последняя попытка (будучи очень отчаянной!) Состояла в том, чтобы ввести имя пользователя и пароль, вызвать все возможные сценарии и запустить все возможные события, см. Код ниже.Пожалуйста, не обращайте внимания на то, как я делал / называл определенные вещи (например, eventsArray для коллекции и т. Д.) - я продолжал пробовать новые вещи и менять код много раз, все это временно.

    Dim eventsArray As New Collection
    eventsArray.Add "abort"
    eventsArray.Add "afterprint"
    eventsArray.Add "animationend"
    eventsArray.Add "animationiteration"
    eventsArray.Add "animationstart"
    eventsArray.Add "beforeprint"
    eventsArray.Add "beforeunload"
    eventsArray.Add "blur"
    eventsArray.Add "canplay"
    eventsArray.Add "canplaythrough"
    eventsArray.Add "change"
    eventsArray.Add "click"
    eventsArray.Add "contextmenu"
    eventsArray.Add "copy"
    eventsArray.Add "cut"
    eventsArray.Add "dblclick"
    eventsArray.Add "drag"
    eventsArray.Add "dragend"
    eventsArray.Add "dragenter"
    eventsArray.Add "dragleave"
    eventsArray.Add "dragover"
    eventsArray.Add "dragstart"
    eventsArray.Add "drop"
    eventsArray.Add "durationchange"
    eventsArray.Add "ended"
    eventsArray.Add "error"
    eventsArray.Add "focus"
    eventsArray.Add "focusin"
    eventsArray.Add "focusout"
    eventsArray.Add "fullscreenchange"
    eventsArray.Add "fullscreenerror"
    eventsArray.Add "hashchange"
    eventsArray.Add "input"
    eventsArray.Add "invalid"
    eventsArray.Add "keydown"
    eventsArray.Add "keypress"
    eventsArray.Add "keyup"
    eventsArray.Add "load"
    eventsArray.Add "loadeddata"
    eventsArray.Add "loadedmetadata"
    eventsArray.Add "loadstart"
    eventsArray.Add "message"
    eventsArray.Add "mousedown"
    eventsArray.Add "mouseenter"
    eventsArray.Add "mouseleave"
    eventsArray.Add "mousemove"
    eventsArray.Add "mouseover"
    eventsArray.Add "mouseout"
    eventsArray.Add "mouseup"
    eventsArray.Add "mousewheel"
    eventsArray.Add "offline"
    eventsArray.Add "online"
    eventsArray.Add "open"
    eventsArray.Add "pagehide"
    eventsArray.Add "pageshow"
    eventsArray.Add "paste"
    eventsArray.Add "pause"
    eventsArray.Add "play"
    eventsArray.Add "playing"
    eventsArray.Add "popstate"
    eventsArray.Add "progress"
    eventsArray.Add "ratechange"
    eventsArray.Add "resize"
    eventsArray.Add "reset"
    eventsArray.Add "scroll"
    eventsArray.Add "search"
    eventsArray.Add "seeked"
    eventsArray.Add "seeking"
    eventsArray.Add "select"
    eventsArray.Add "show"
    eventsArray.Add "stalled"
    eventsArray.Add "storage"
    eventsArray.Add "submit"
    eventsArray.Add "suspend"
    eventsArray.Add "timeupdate"
    eventsArray.Add "toggle"
    eventsArray.Add "touchcancel"
    eventsArray.Add "touchend"
    eventsArray.Add "touchmove"
    eventsArray.Add "touchstart"
    eventsArray.Add "transitionend"
    eventsArray.Add "unload"
    eventsArray.Add "volumechange"
    eventsArray.Add "waiting"
    eventsArray.Add "wheel"

    'set un and pw obj
    Set user = IE.Document.all.user
    Set pass = IE.Document.all.pass

    'enter un and pw
    user.Value = "test@test.com"
    pass.Value = "test123"

    'for each element
    For Each ele In Array(user, pass)
        'fire all poss events
        For Each fEvent In eventsArray
            On Error Resume Next
            ele.FireEvent ("on" & fEvent)
            ele.FireEvent (fEvent)
            On Error GoTo 0
        Next
    Next

    'exec all scripts availible in document
    For Each scr In IE.Document.Scripts
        On Error Resume Next
        Call IE.Document.parentWindow.execScript(scr.src, "JavaScript")
        On Error GoTo 0
    Next

    'sign in
    IE.Document.getElementById("loginLink").Click

Что происходит после нажатия входаон возвращает «Вам не хватает адреса электронной почты, бла-бла», и оба значения исчезают.Если я изменю одно из этих полей вручную перед отправкой, другое значение исчезнет.

Я пробовал некоторые случайные вещи, такие как добавление прослушивателей событий, нажатие, фокусировка и что нет, даже пытался делать все эти вещи после вводакаждый символ для имени пользователя и пароля.Я признаю, что просто слепо попробовал все эти вещи в надежде, что что-то сработает, очевидно, не увенчался успехом, и я не знаю, что делать.Буду признателен за любую помощь!

/ edit: я достиг желаемого результата с помощью sendkeys (пробел + backspace в каждом поле), однако я не хочу делать это таким образом.Конечно, есть лучший способ?

Ответы [ 2 ]

1 голос
/ 19 марта 2019

Я бы использовал selenium basic vba (установите и убедитесь, что последняя версия chromedriver находится в папке selenium) и vbe> tools> reference> добавьте ссылку на библиотеку типов selenium. Это намного чище.

Option Explicit
Public Sub Login()
    Dim d As WebDriver
    Set d = New ChromeDriver

    With d
        .Start "Chrome"
        .get "https://uk.webuy.com/"

        .FindElementByCss("#signIn").Click
        .FindElementByCss("#user").SendKeys "abc@aol.com"
        .FindElementByCss("#pass").SendKeys "password"
        .FindElementByCss("#loginLink").Click

        Stop

        .Quit
    End With
End Sub
0 голосов
/ 11 апреля 2019

Вы пробовали что-то вроде этого:

Sub cexLogIn()
Dim req As New WinHttpRequest
Dim reqBody As String
Dim reqURL As String
Dim respHeaders As String
Dim resp As String
reqURL = "https://wss2.cex.uk.webuy.io/v3/members/login"
reqBody = "{""password"":""PASSWORD"",""email"":""EMAIL@EMAIL.COM""}" 'use your credentials
With req
    .Open "POST", reqURL, False
    .setRequestHeader "Host", "wss2.cex.uk.webuy.io"
    .setRequestHeader "Accept", "application/json, text/plain, */*"
    .setRequestHeader "Accept-Language", "en-US,en;q=0.5"
    .setRequestHeader "Accept-Encoding", "gzip, deflate, br"
    .setRequestHeader "Referer", "https://uk.webuy.com/"
    .setRequestHeader "Content-Type", "application/json;charset=UTF-8"

    .send reqBody
    resp = .responseText
    respHeaders = .getAllResponseHeaders
End With
Debug.Print respHeaders
Debug.Print resp
End Sub

Измените заглавные буквы в соответствии с вашими учетными данными.

Обычно вы должны войти в систему, и ваш сессионный cookie-файл должен быть возвращен вам взаголовки ответа.Этот файл cookie может быть прикреплен к любым другим запросам, которые вы хотели бы сделать на веб-сайте.

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

Ссылки: Microsoft WinHTTP Services, version 5.1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...