VBA以2步loginlogin网站

作为标题说我有一个错误在htdoc.all.verificationcode.Value = otp

它说运行时错误'438':对象不支持这个属性或方法

我花了一个下午的时间试图找出有什么问题,我真的希望你们能帮我一把。

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"> 

好。 这看起来是一个好的开始。 您将进入一个页面,input一些值并点击提交> 。 你还没有设置MyBrowser.visibleFalse,所以我假设你可以看到这个。

首先你需要等待MyBrowser加载页面后, .click 提交> 。 每当你去一个新的页面,你将需要等待; 我最喜欢把所有的等待都放在这样的一条线上。

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

当你有新的页面,你需要find你的OTP并将其存储在一个variables。 看看新页面背后的HTML。 你可能会看到像这样的东西:

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

你可以把它放到你之前声明的variables中。

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

现在你已经存储了密码,你可以用它做一些事情。