excel - 使用 vba 登录网站 - 单击提交时 un 和 pw 消失
问题描述
我正在尝试编写一个可以简单地登录到该网站的宏。
我之前做过一些网络抓取,并且总是能够在其他网站上成功地做类似的事情,但我无法弄清楚这一点。
我已经尝试了很多东西,最后一次尝试(非常绝望!)是输入用户名和密码,并调用所有可能的脚本并触发所有可能的事件,请参见下面的代码。请忽略我是如何做/命名某些事情的(比如集合的 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”,并且两个值都消失了。如果我在提交之前手动修改其中一个字段,另一个值就会消失。
我尝试了一些随机的事情,比如添加事件侦听器、单击、聚焦等等,甚至在输入用户名和密码的每个字符后尝试做所有这些事情。我承认我只是盲目地尝试了所有这些事情,希望有些事情会奏效,显然没有成功,我不知道该怎么做。任何帮助将不胜感激!
/edit:我通过使用sendkeys(每个字段中的空格+退格)达到了预期的结果,但是我不想这样做。肯定有更好的方法吗?
解决方案
我会使用selenium basic vba(安装并确保最新的 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
推荐阅读
- jenkins - Jenkins 声明性管道 - 如果不满足某些条件而不是跳过一个阶段,如何中止整个构建?
- python - anaconda安装失败,安装后只有三个文件夹
- r - 将反应文本添加到闪亮仪表板主面板上方的部分
- indexing - xarray DataFrame 中的索引
- elasticsearch - 将 elasticsearch 集群恢复到另一个集群
- css - 引导轮播和 css 变换比例不起作用
- python - TypeError:“NoneType”和“int”实例之间不支持“>”(Python)
- android - 底部导航图标未相对于加载的片段突出显示
- angular - 输入字段未以 Angular 11 反应形式动态更新
- java - 弹簧清除序列发生器