VBA通过2步登录登录网站

时间:2015-04-20 15:10:05

标签: html excel vba internet-explorer login

标题显示我在 htdoc.all.verificationcode.Value = otp

时出错

它表示运行时错误'': 对象不支持此属性或方法

我花了一个下午试图找出它的问题,我真的希望你们能帮助我。

Dim HTMLDoc As HTMLDocument
Dim htdoc As HTMLDocument
Dim MyBrowser As InternetExplorer
Sub login()
Dim username As Range
Dim password As Range
Dim otp As Range
Dim myValue As Variant
Dim MyHTML_Element As IHTMLElement
Dim MyURL As String
MyURL = "XXXXXXXXXXXXXXXXXXXXXX"
Set MyBrowser = New InternetExplorer
MyBrowser.silent = True
MyBrowser.navigate MyURL
MyBrowser.Visible = True
Set username = Range("B1")
Set password = Range("B2")
Set otp = Range("B3")
Do
Loop Until MyBrowser.readyState = READYSTATE_COMPLETE
Set HTMLDoc = MyBrowser.document
HTMLDoc.all.UserId.Value = username
HTMLDoc.all.password.Value = password
For Each MyHTML_Element In HTMLDoc.getElementsByTagName("input")
If MyHTML_Element.Type = "submit" Then MyHTML_Element.Click: Exit For
Next

MyURL2 = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
MyBrowser.silent = True
MyBrowser.navigate MyURL2
MyBrowser.Visible = True
myValue = InputBox("Enter OTP")
Range("B3").Value = myValue
Application.Wait (Now + TimeValue("0:00:10"))

Do
Loop Until MyBrowser.readyState = READYSTATE_COMPLETE
Set htdoc = MyBrowser.document
htdoc.all.verificationcode.Value = otp
For Each MyHTML_Element In htdoc.getElementsByTagName("input")
If MyHTML_Element.Type = "btnobj" Then MyHTML_Element.Click: Exit For
Next


Err_Clear:
 If Err <> 0 Then
 Err.Clear
 Resume Next
 End If

End Sub



HTML in the webpage for the form is
<input name="verficationcode" id="verficationcode" type="password" size="18" maxlength="16" autocomplete="off">
<input name="btnobj" class="inputbutton" id="submitButton" onclick="checkSubmit(this);" type="button" value="Submit">

1 个答案:

答案 0 :(得分:0)

行。这似乎是一个良好的开端。您将转到页面,输入一些值并单击提交&gt; 。您尚未将MyBrowser.visible设置为 False ,因此我假设您可以看到此情况。

您需要做的第一件事是在.click 提交&gt; 之后等待MyBrowser加载页面。每次进入新页面都需要等待;我最喜欢的是将所有的等待放到一行中。

MyHTML_Element.Click
Do While (MyBrowser.Busy Or MyBrowser.readyState <> READYSTATE_COMPLETE): DoEvents: Loop

当您拥有该新页面时,您需要找到您的OTP并将其存储在变量中。查看新页面背后的HTML。你可能会看到这样的东西:

<div id='One_Time_Password'>
     47665489_29751678
</div>

你可以将它放入你之前声明的变量中。

dim  myOTP as string
myOTP = MyBrowser.getElementsById("One_Time_Password").innerText

现在你已经存储了密码,你可以用它做点什么。