我有一个宏,只需按一下按钮,它就可以登录我的网站。但是,事实并非如此。 有人已经在尝试帮助我,但这就像他自己说的那样有点烦人。因此,我在这里再次尝试更多细节!
这是他给我的最后一个密码。
Public Sub GetInfo()
Dim IE As New InternetExplorer
With IE
.Visible = True
.navigate "https://apiweb.biomerieux.com/login"
While .Busy Or .readyState < 4: DoEvents: Wend
With .document.getElementById("signupEmail")
.Focus
.Value = "xxxx"
End With
Application.Wait Now + TimeSerial(0, 0, 1)
With .document.getElementById("signupPassword")
.Focus
.Value = "yyyy"
End With
On Error Resume Next
With .document.getElementById("signupSubmit")
.Focus
.Click
End With
'.Quit
End With
End Sub
最奇怪的是,当您通过宏在文本框中输入凭据并单击按钮时,站点认为即使输入了凭据,也没有输入凭据。
我以前的助手认为网站上的部分javascript可能将其弄乱了。
答案 0 :(得分:2)
如果您检查html及其相关事件,则会看到与这些登录字段相关联的许多事件侦听器。实际上,您只需添加input
事件,然后触发它就可以逃脱。通常,当手动在输入框中键入内容时,事件监听器会捕获到该事件。
看到@SIM的答案:我的之所以起作用,是因为它会生成事件,否则该事件将被现有事件侦听器以其答案中给出的延迟接收。 IMO,如果您使用定时循环,他们的方法会更好。
其中一个事件侦听器的视图:
VBA:
Option Explicit
Public Sub Login()
With CreateObject("InternetExplorer.Application")
.Visible = True
.navigate2 "https://apiweb.biomerieux.com/login"
While .busy Or .readyState <> 4: DoEvents: Wend
With .document
Dim evt As Object
Set evt = .createEvent("HTMLEvents")
evt.initEvent "input", True, False
With .querySelector("#signupEmail")
.Value = "abc@gmail.com"
.dispatchEvent evt
End With
With .querySelector("#signupPassword")
.Value = "defghij"
.dispatchEvent evt
End With
.querySelector("table a").Click
End With
Stop '<==delete me later
.Quit
End With
End Sub
阅读:
答案 1 :(得分:2)
我认为这种简单的方法足以完成工作。您需要做的就是让脚本等待第一个输入的html元素可用。
Sub LogMeIn()
Dim IE As New InternetExplorer, post As Object, HTML As HTMLDocument
With IE
.Visible = True
.navigate "https://apiweb.biomerieux.com/login"
While .Busy Or .readyState <> 4: DoEvents: Wend
Set HTML = .document
With HTML
Do: Set post = .querySelector("#signupEmail"): DoEvents: Loop While post Is Nothing
.querySelector("#signupEmail").innerText = "imc@yahoo.com"
.querySelector("#signupPassword").innerText = "abc12345"
.querySelector("a > #signupSubmit").Click
End With
End With
End Sub