javascript - 当按钮没有名称/ID 时,用 VBA 单击 JS 按钮

标签 javascript vba excel internet-explorer

我这辈子都想不出如何用 VBA 单击下面的按钮。任何帮助,将不胜感激。我已经能够填充用户名/密码字段,因为它们有名称,所以我使用 getElementsByName 但按钮没有名称或 ID。

具体按钮代码为:

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

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

微软 HTML 对象库 微软互联网控制 Microsoft WinHTTP 服务,版本 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

最佳答案

假设 class="button-left"是您的 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

关于javascript - 当按钮没有名称/ID 时,用 VBA 单击 JS 按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43596731/

相关文章:

regex - 如何在 VBA 中使用 RegEx 进行多行任意字符匹配,包括换行符

performance - Excel VBA - 常量字符串范围或定义范围名称之间的任何性能优势?

vba - 运行 Excel 宏时,截图工具无法启动截图?

excel - 我可以将自动填充限制为仅单元格内容吗?

javascript - 使用 addEventListener 阻止 onClick 处理程序

javascript - 将 JSON 树结构读取到自定义 javascript 对象中

javascript - 与 <ul> 或 <div> 相比,<table> 在尝试获取子标签集合时的行为是否不同? (JavaScript)

excel - 从命名范围/公式返回值(错误 1004、2015 或 13)

excel - 语法明显正确的公式仍然返回输入错误

javascript - Mocha/Chai to.not.throw(TypeError) 奇怪的行为