Excel 单击提交时使用vba-un和pw dissapear登录网站

Excel 单击提交时使用vba-un和pw dissapear登录网站,excel,vba,internet-explorer,web-scraping,Excel,Vba,Internet Explorer,Web Scraping,我试图写一个宏,将简单地登录到网站 我以前做过一些网页抓取,并且总是能够在其他网站上成功地做类似的事情,但我不知道这一点 我已经尝试了很多事情,最后一次尝试(非常绝望!)是输入用户名和密码,调用所有可能的脚本并触发所有可能的事件,请参见下面的代码。请忽略我是如何做/命名某些事情的(比如收藏的eventsArray等)——我不断尝试新事物并多次更改代码,这都是暂时的 Dim eventsArray As New Collection eventsArray.Add "abort"

我试图写一个宏,将简单地登录到网站

我以前做过一些网页抓取,并且总是能够在其他网站上成功地做类似的事情,但我不知道这一点

我已经尝试了很多事情,最后一次尝试(非常绝望!)是输入用户名和密码,调用所有可能的脚本并触发所有可能的事件,请参见下面的代码。请忽略我是如何做/命名某些事情的(比如收藏的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
单击“登录”后会返回“您缺少电子邮件地址blahblah”,这两个值都会消失。如果在提交之前手动修改其中一个字段,则另一个值将消失

我尝试了一些随机的事情,比如添加事件监听器、单击、聚焦等等,甚至在输入用户名和密码的每个字符后尝试了所有这些事情。我承认,我只是盲目地尝试了所有这些东西,希望能有办法,但显然没有成功,我不知道该怎么办。任何帮助都将不胜感激

/编辑: 我通过使用sendkeys(每个字段中的空格+退格)获得了预期的结果,但是我不想这样做。当然有更好的方法吗?

我会使用(安装并确保最新的chromedriver在selenium文件夹中)和vbe>tools>references>add selenium type library reference。它干净多了

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

你有没有试过这样的方法:

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,5.1版

一旦您填写了手动登录的凭据,您如何判断您已登录,这意味着您在新页面或其他地方看到了您的配置文件名?“客户登录”框消失,“我的帐户”取代“登录”在页面顶部。当我运行宏时,我可以同时看到
我的帐户
登录
。因此,您的信息不准确。在您登录之前,页面顶部的前两个按钮是“登录”和“注册”。要登录,请单击“登录”,这将打开“客户登录”框以输入凭据。一旦您成功登录,该框将消失,“登录”按钮将消失,“注册”将更改为“我的帐户”。或者,您可以导航到“”-如果您登录,您将看到“订单跟踪”和其他选项,否则它将打开一个框并抛出“抱歉,出现问题。请在几秒钟后重试”。谢谢QHarr的建议,但是我不想使用selenium,这样它可以在不同的工作站上工作,并且可以用作vbscript。此外,我会不惜一切代价避免SendKeys(除非它在selenium中是另一回事?)。我认为SendKeys与selenium配合很好。非常可靠。它与我知道的SendKeys有什么不同吗?例如,如果窗口不活动,它将失败?你将要做什么来改变方向?你可以轻弹标签,它仍然会发送到正确的页面。它发送到元素。是的。。。您可以运行headless,也可以通过任务调度器从vbscript运行headless。事实上,您可以避免vba本身,只需在vbscript中编写整个过程,因为selenium支持这一点。但是,是的,需要用户具有适当的设置。