我的互联网服务提供商的无线路由器有时会起作用,重启设备通常可以正常工作。问题在于它安装在墙壁上,在一个难以触及的地方的家具后面。可以通过登录路由器并按下重启按钮远程执行此操作。但是,这很麻烦,所以我想写一个简短的AppleScript来自动化这个过程。一旦我登录到路由器的界面,我或多或少知道如何继续,但由于某种原因,我无法输入密码并获得界面点击"日志-in"使用Java的按钮。
我使用的脚本是
tell application "Safari"
set ActiveSearchContent to do JavaScript "document.getElementById('password').value='" & RouterPassword & "'" in O2BoxWindow
delay 2
do JavaScript "document.getElementById('next_button').click()" in O2BoxWindow
delay 2
nd tell

但它似乎不起作用。 我尝试在Safari的Web Inspector中单独输入命令,这就是我得到的:
TypeError:null不是对象(评估' document.getElementById('密码')。value =' xyz'') 和 TypeError:null不是一个对象(评估' document.getElementById(' next_button')。点击')
我不明白这一点,因为元素是由他们的ID定义的。
这里是路由器接口的DOM结构:
<html xmlns="http://www.w3.org/1999/xhtml"><head>
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>o2.box</title>
<script src="menu_131.js" type="text/javascript"></script><style type="text/css"></style>
<!--<script src="TO2.js" type="text/javascript"></script>-->
<script type="text/javascript">
var isIE = navigator.userAgent.search("MSIE") > -1;
var isOpera = navigator.userAgent.search("Opera") > -1;
var isSafari = navigator.userAgent.search("Safari") > -1;
var setprotectStatus = '1';
function SetCwinHeight() {
/*var iframe = document.getElementById("mainframe");
var bHeight = iframe.contentWindow.document.body.scrollHeight;
var dHeight = iframe.contentWindow.document.documentElement.scrollHeight;
var height = bHeight>dHeight?bHeight:dHeight;
iframe.height = height*/
var iframe = document.getElementById("mainframe");
if(isOpera || isSafari)
{
//iframe.height = iframe.contentWindow.document.documentElement.scrollHeight;
}
else if(isIE)
{
iframe.height = iframe.contentWindow.document.body.scrollHeight+8;
}
else//other broswer
{
iframe.height = iframe.contentWindow.document.documentElement.offsetHeight+2;
}
}
function hideBody(hide) {
var status = '';
if ( hide == 1 )
status = 'hidden';
if (document.getElementById) // DOM3 = IE5, NS6
document.getElementById('bodyhide').style.visibility = status;
else {
if (document.layers == false) // IE4
document.all.bodyhide.style.visibility = status;
}
}
function frmLoad()
{
var setprotectStatus = '1';
if( window.self != window.top )
{
hideBody(1);
self.parent.location.href = self.location.href;
/* var parenturl = parent.window.location.href;
var partsparenturl = parenturl.split("/");
parent.window.location.replace(partsparenturl[0] + '/' + partsparenturl[1] + '/' + partsparenturl[2] + '/index_setupWizard.html');
*/ }
else
{
hideBody(0);
}
}
</script>
<link href="menu_131.css" rel="stylesheet" type="text/css">
</head>
<body onload="frmLoad()" class="body_center" id="bodyhide" style="" onresize="javascript:SetCwinHeight();">
<div class="topinfo"></div>
<div class="logo_header">
<span id="headerText"><b>Einrichtungsassistent </b> Kennwort</span>
</div>
<div class="main">
<div class="mainnav">
<div class="menu"></div>
<div id="menu" style="">
<div class="menu_head"></div>
<ul class="flipMenu">
<li class="flipLock"><a target="mainframe" class="padding20" style="color:#686868">Übersicht</a><ul style="display: none;"></ul></li>
<li class="flipLock"><a target="mainframe" class="padding20" style="color:#686868">Internet</a><ul style="display: none;"></ul></li>
<li class="flipLock"><a target="mainframe" class="padding20" style="color:#686868">Telefonie</a><ul style="display: none;"></ul></li>
<li class="flipLock"><a target="mainframe" class="padding20" style="color:#686868">Heimnetz</a><ul style="display: none;"></ul></li>
<li class="flipLock"><a target="mainframe" class="padding20" style="color:#686868">Sicherheit</a><ul style="display: none;"></ul></li>
<li class="flipLock"><a target="mainframe" class="padding20" style="color:#686868">System</a><ul style="display: none;"></ul></li>
</ul>
<div><a class="selected_SetupWizard_Lock">Einrichtungsassistent</a></div>
<br><br>
</div>
</div>
<div class="data">
<iframe id="mainframe" name="mainframe" src="kennwortlock.cmd?action=view" width="100%" onload="javascript:SetCwinHeight();" frameborder="0" height="509"></iframe>
</div>
<div></div>
</div>
</body></html>
&#13;
有人可以帮忙吗?任何帮助将不胜感激。
答案 0 :(得分:0)
将表单加载到iframe中。因此,您必须引用iframe中的元素。可以说,它们处于更深层次。您正在引用DOM结构中的元素,而您应该引用iframe中的元素。
像这样:
window.frames [&#39; myIFrame&#39;]。document.getElementById(&#39; myIFrameElemId&#39;)或 window.frames [&#39; myIFrame&#39]。contentDocument.getElementById(&#39; myIFrameElemId&#39)
取决于浏览器。第一个应该适用于IE,最后一个应该适用于FireFox和Chrome。 Safari不确定。
但是你必须注意同源政策。您的脚本和iframe中的脚本必须位于同一个域中,否则您将收到错误消息。
有关此主题的更多信息,请访问:Access iframe elements in JavaScript