如何使用JAVA

时间:2015-08-29 10:06:18

标签: javascript applescript

我的互联网服务提供商的无线路由器有时会起作用,重启设备通常可以正常工作。问题在于它安装在墙壁上,在一个难以触及的地方的家具后面。可以通过登录路由器并按下重启按钮远程执行此操作。但是,这很麻烦,所以我想写一个简短的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&nbsp;&nbsp;</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;
&#13;
&#13;

有人可以帮忙吗?任何帮助将不胜感激。

1 个答案:

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