首先,这里是代码:(代码与vba-open-website的标准代码没什么不同,如果节省你的时间阅读,我放了< ------- --HERE 表示我输入密码的位置
Sub Login_2Wiki()
Dim ieApp As InternetExplorer
Dim ieDoc As Object
Dim ieTable As Object
Dim clip As DataObject
Dim iusr As Object
Dim ipwd As Object
Dim iform As Object
'create a new instance of ie
Set ieApp = New InternetExplorer
'you don’t need this, but it’s good for debugging
ieApp.Visible = True
'assume we’re not logged in and just go directly to the login page
ieApp.Navigate "https://xxx.xxxxx.com/login.action?"
Do While ieApp.Busy: DoEvents: Loop
Do Until ieApp.ReadyState = READYSTATE_COMPLETE: DoEvents: Loop
Set ieDoc = ieApp
'fill in the login form – View Source from your browser to get the control names
With ieDoc
Set iform = .Document.getElementById("login-container")
Set iusr = iform.Document.getElementById("os_username")
iusr.Value = "guest"
Set ipwd = iform.Document.getElementById("os_password")
ipwd.Value = "abc"
.Document.getelementsbyname("loginButton")(0).Click
End With
Do While ieApp.Busy: DoEvents: Loop
Do Until ieApp.ReadyState = READYSTATE_COMPLETE: DoEvents: Loop
'close 'er up
ieApp.Quit
Set ieApp = Nothing
End Sub
以及此处网页上源代码的一部分(如果重要的话,它是 Atlassian Confluence 页面):
<div class="field-group
"
>
<label id="os_username-label" for="os_username">
Username
</label>
<input type="text" name="os_username" id="os_username" class="text " placeholder="Username" data-focus="0" />
</div>
<div class="field-group">
<label id="os_password-label" for="os_password">
Password
</label>
<input type="password" name="os_password" id="os_password" class="password " placeholder="Password" />
</div>
问题:代码只在网页上填写了用户名而不是密码。它没有错误。另外我注意到网页的源视图中有 data-focus =&#34; 0&#34; ,并想知道是否是导致问题的原因。
编辑:我已经用 .Document.all.Item 替换了 .Document.all.Item .Document.getElementById 方法,虽然代码可以找到元素os_password(没有错误),但它无法为其赋值。 os_username和以前一样工作。
答案 0 :(得分:1)
尝试:
With .Document.getElementById("os_password")
.Focus()
.Value = "abc"
End With
答案 1 :(得分:1)
我不相信重点与您的问题有关。如果A1是 ActiveCell ,那就好像说Range("B1") = "abc"
。只要您将字符串直接传输到.Value
属性,焦点就不应成为问题。如果你发送击键,那么焦点可能会变得很重要,但我们不会这样做。
我遇到了类似的情况,这是一个多用途的登录页面。相同的目标网页&#39;为买家和卖家提供单独的登录表格。我怀疑仔细检查该页面后面的HTML会显示实际上有两个具有相同名称/ ID的元素(例如 os_password )。除此之外,.Document.all.Item("something")
方法可用于名称或ID;不是分配值的最权威方法。您似乎正在设置标识为 os_password 的内容;只是不正确的 os_password 。
如果出现这种情况,则必须将输入的密码作为要处理的表单的子项,而不是整个文档正文。如果您的表单的ID为 Second_Form ,那么您将访问输入字段,如下所示:
dim eFRM as MSHTML.IHTMLElement
set eFRM = ieApp.document.getElementById("Second_Form")
eFRM.getElementById("os_username").Value = "guest"
eFRM.getElementById("os_password").Value = "abc"
'don't use names to locate elements - horribly unreliable
eFRM.submit