IE下document.getElementsByName无法获取DIV标签

本文探讨了在Internet Explorer(IE)和Firefox(FF)浏览器中使用document.getElementsByName方法获取带有特定名称属性的DIV标签的问题,并提供了一种兼容两种浏览器的方法。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>IE下document.getElementsByName无法获取DIV标签</title>
<style>
div {
	width: 100px;
	height: 100px;
	border: 1px solid #dddddd;
}
</style>
</head>
<body>
<div name="odiv">div1</div>
<div name="odiv">div2</div>
<div name="odiv">div3</div>
<div name="odiv">div4</div>
<div name="anotherdiv">AnotherDiv</div>
<script type="text/javascript">
<!--
// 可见在IE下通过document.getElementsByName是无法获取DIV标签的,FF可以
alert(document.getElementsByName("odiv").length); // IE:0 FF:4

// 兼容IE FF的ByName方法
var getElementsByName = function(tag, name){
    var returns = document.getElementsByName(name);
    if(returns.length > 0) return returns;
    returns = new Array();
    var e = document.getElementsByTagName(tag);
    for(var i = 0; i < e.length; i++){
        if(e[i].getAttribute("name") == name){
            returns[returns.length] = e[i];
        }
    }
    return returns;
}
alert(getElementsByName("div","odiv").length); // IE:4 FF:4
//-->
</script>
</body>
</html>
#Requires AutoHotkey v2.0 ; 创建IE浏览器实例 ie := ComObject("InternetExplorer.Application") ie.Visible := true ; 显示浏览器窗口 ie.Navigate("https://cbank.jsbchina.cn/corporbank/#") ; 等待页面加载完成 WinWaitActive("江苏银行企业网上银行 欢迎您的光临!") while ie.ReadyState != 4 || ie.Busy ; 4=READYSTATE_COMPLETE Sleep 100 ; 定位用户输入框并输入内容 try { ; 输入用户名 userIdInput := ie.Document.getElementById("userIdText") if IsObject(userIdInput) { userIdInput.value := "1234" } else { throw Error("无法定位用户输入框") } ; 等待按钮可能需要的加载时间 Sleep 2000 ; 尝试定位并点击安装控件按钮 clicked := false ; 方法1:通过父元素ID定位 (推荐) try { parentDiv := ie.Document.getElementById("smsCode_pgc") if IsObject(parentDiv) { ; 获取第二个DIV子元素 (索引从0开始) if parentDiv.children.length >= 2 { installButton := parentDiv.children[1] if IsObject(installButton) && installButton.tagName = "DIV" { installButton.click() clicked := true } } } } ; 方法2:通过CSS选择器定位 (备用) if !clicked { try { cssSelector := "HTML>BODY>DIV:nth-child(17)>DIV:nth-child(2)>DIV>DIV:nth-child(2)>DIV>TABLE:nth-child(2)>TBODY>TR:nth-child(2)>TD>DIV>DIV:nth-child(2)" installButton := ie.Document.querySelector(cssSelector) if IsObject(installButton) { installButton.click() clicked := true } } } ; 方法3:通过XPath定位 (备用) if !clicked { try { ; 遍历所有DIV元素查找特定文本 allDivs := ie.Document.getElementsByTagName("DIV") loop allDivs.length { element := allDivs[A_Index - 1] if InStr(element.innerText, "请点此安装控件") { element.click() clicked := true break } } } } if !clicked { throw Error("无法定位安装控件按钮") } MsgBox "安装控件按钮点击成功!等待密码输入框出现...", "提示", "Iconi" ; 等待密码输入框出现(可能需要额外时间) Sleep 3000 ; 尝试定位密码输入框并使其获得焦点 passwordInput := "" try { ; 方法1:通过ID定位(最优) passwordInput := ie.Document.getElementById("passwordText") } ; 方法2:通过name属性定位(备用) if !IsObject(passwordInput) { try { passwordInput := ie.Document.querySelector("input[name='password']") } } ; 方法3:通过输入框类型定位(最后尝试) if !IsObject(passwordInput) { try { allInputs := ie.Document.getElementsByTagName("INPUT") loop allInputs.length { element := allInputs[A_Index - 1] if (element.type = "password") { passwordInput := element break } } } } if IsObject(passwordInput) { ; 使密码框获得焦点 passwordInput.focus() Sleep 500 ; 等待焦点切换 ; 使用幽灵键鼠模拟键盘输入密码 Send "123" ; 模拟键盘输入 MsgBox "密码输入成功!", "成功", "Iconi" } else { ; 如果无法定位密码框,尝试通过Tab键导航到密码框 MsgBox "无法定位密码框,尝试使用Tab键导航...", "提示", "Iconi" ; 点击用户名框使页面获得焦点 userIdInput.focus() Sleep 500 ; 发送Tab键切换到密码框 Send "{Tab}" Sleep 500 ; 输入密码 Send "123" MsgBox "通过Tab键导航并输入密码成功!", "成功", "Iconi" } } catch as e { MsgBox "操作失败: " e.Message, "错误", "Iconx" } ; 保持浏览器打开 ; ie.Quit() ; 为啥还是点不了密码框也输入不进去
08-15
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值