2017-04-24 132 views
1

我不能为我的生活找出如何用VBA点击下面的按钮。任何帮助,将不胜感激。我已经能够填充用户名/密码字段,因为他们有一个名称,所以我使用getElementsByName,但该按钮没有名称或ID。当按钮没有名字/ ID时,点击带有VBA的JS按钮

的特定按钮的代码是:

<table class="button"><tr><td><div class="button-left"><input type="submit" class="form-button" value="Submit" > 

以下是完整的脚本/表单代码的情况下,它可以帮助

<form name="loginFormBean" method="post" action="/XXXXXXXX/login.do" onsubmit="return validateForm(this)"> 
    <TABLE border="0" cellpadding="5" cellspacing="0"> 
     <TR> 
      <TD class="bigGreyContent" nowrap>User ID</TD> 
      <TD class="bigGreyContent" align="left"> 
       <input type="text" name="username" maxlength="50" size="40" value="" class="bgGreenColor"> 
      </TD> 
     </TR> 
     <TR> 
      <TD class="bigGreyContent" nowrap>Password</TD> 
      <TD class="bigGreyContent" align="left"> 
       <input type="password" name="password" maxlength="50" size="40" value="" class="bgGreenColor"> 
      </TD> 
     </TR> 
     <TR> 
      <TD colspan="2" align="center"> 
      <BR> 
      <table class="button"><tr><td><div class="button-left"><input type="submit" class="form-button" value="Submit" ></div><div class="button-right"></div></td></tr></table>  
      </TD> 
     </TR> 
    </TABLE> 
</form> 

编辑:我已经启用了以下引用(除了默认):

Microsoft HTML Object Library Microsoft Internet Controls Microsoft WinHTTP Services,Version 5.1 微软XML,V6.0

我当前的代码是:

Sub XXXX() 

    Dim objIE As InternetExplorer 
    Dim http As New MSXML2.XMLHTTP60 
    Dim html As New HTMLDocument 
    Dim btn As Object 
    Set objIE = New InternetExplorer 
    Set btn = html.getElementsByClassName("button-left")(0).getElementsByTagName("input")(0) 
    objIE.Visible = True 
    objIE.navigate "http://XXXX/login.jsp" 
    Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop 
    objIE.document.getElementsByName("username")(0).Value = "XXXX" 
    objIE.document.getElementsByName("password")(0).Value = "YYYY" 
    btn.Click 

End Sub 

回答

2

假设类= “按钮左侧的” 为您的HTML中第一次出现,试试这个:

Dim btn As Object 
Set btn = html.getElementsByClassName("button-left")(0).getElementsByTagName("input")(0) 
btn.Click 

编辑:

如果您还没有,您应该添加Microsoft HTML Object LibraryMicrosoft XML v6.0,从Tools -> References

当前你被困在你的方法和我的方法之间。你需要选择一个,所以请尝试这个办法:

Sub XXXX() 
Dim http As New MSXML2.XMLHTTP60 
Dim html As New HTMLDocument 
Dim btn, usr, psw As Object 

With CreateObject("MSXML2.serverXMLHTTP") 
    .Open "GET", "http://XXXX/login.jsp", False 
    .send 
    html.body.innerHTML = .responseText 
End With 

Set usr = html.getElementsByTagName("Form")(0).getElementsByTagName("input")(0) 
Set psw = html.getElementsByTagName("Form")(0).getElementsByTagName("input")(1) 
Set btn = html.getElementsByTagName("Form")(0).getElementsByTagName("input")(2) 

usr.Value = "Username" 
psw.Value = "Password" 
btn.click 

Set html = Nothing: Set btn = Nothing: Set usr = Nothing: Set psw = Nothing 
End Sub 
+0

感谢您的回复,但是我收到以'Set btn'开头的行上的424/Object Required错误,有什么想法?从我所知道的情况来看,这是左按钮的第一个实例。 – Hydengard

+0

请确保您的代码中包含以下内容:'Dim http As New MSXML2.XMLHTTP60' Dim html As New HTMLDocument'Dim btn As Object'。如果它仍然不起作用,请分享您的代码,这样我就可以停止猜测问题是什么。 – Tehscript

+0

我已经添加了上面的代码和其他信息。现在我添加了您提供的两个额外的Dim,我得到一个91/Object变量或块变量未设置错误,与之前一样。 – Hydengard

0

你的代码几乎corect.You需要设置Set html = objIE.document,然后更改的Set btn = html.getElementsByClassName(...)的位置,它是该文档已被加载之后。顺便说一句。 @Tehscript的答案也适用。

Dim objIE As InternetExplorer 
Dim http As New MSXML2.XMLHTTP60 
Dim html As New HTMLDocument 
Dim btn As Object 
Set objIE = New InternetExplorer 

objIE.Visible = True 
objIE.navigate Path 
Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop 
Set html = objIE.document ' <-- This is the cause of the error 91 
Set btn = html.getElementsByClassName("button-left")(0).getElementsByTagName("input")(0) ' <-- Button can be set after the document has been loaded 
objIE.document.getElementsByName("username")(0).Value = "XXXX" 
objIE.document.getElementsByName("password")(0).Value = "YYYY" 
btn.Click