2017-04-24 128 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