如何定位每次在 iMacros 中重新加载页面后名称都更改的表单输入字段

How to target form input fields whose names are changing everytime after reloading page in iMacros?

本文关键字:字段 输入 表单 定位 何定位 iMacros 新加载 加载      更新时间:2023-09-26

我一直在尝试在网站上定位表单,但猜测在录制超过 5 次后一次又一次地播放我的 iMacros 脚本后我意识到了什么。每次页面重新加载时,表单名称和输入名称都会更改。也没有其他属性可供我使用 HTML 定位,X/Y 位置记录模式也没有帮助......所以如果你们让我知道,请..如何让它工作?

这是我尝试针对的表单代码,但由于它每次都在变化,所以请如何完成:

<form action="" method="post">
<div class="uzuyjgec">
<input name="kAEuwLjmplRMZazfl/s9bW6YpnOxDDX2/2K0sobG" class="tbox" type="text">
</div>
<div class="tyqtmvha">
<input name="kwHKrLjmplTDzY/lMx57neltV9ErW378S1mX9h5S" class="tbox" type="text">
</div>
<input name="submit" value="Search!" class="tbox" type="submit">
</form>

我刚刚取出了输入的代码,但代码中有这么多输入太令人困惑了......!

这是实时状态的完整原始代码: http://jsfiddle.net/rt1ff6ab/

它在 jsfiddle 中显示的实时状态输入太多,但它在站点中仅显示 2 个输入,请截图为:

https://i.stack.imgur.com/451QH.png

根据 JSFiddle 和您显示的图像,看起来某些输入是隐藏的。您可以使用此代码获取可见输入:

var isVisible=function(node){
    return (node.offsetWidth && node.offSetWidth >0) || (node.offsetHeight && node.offsetHeight>0);
};
var inputs=[].filter.call(document.querySelectorAll('input'),isVisible);
var usernameInput=inputs[0];
var hoursInput=inputs[1];
console.log(usernameInput,hoursInput);

该代码将页面上的第一个和第二个可见输入记录到控制台。

我分叉了你的JSFiddle并添加了CSS来隐藏除两个输入之外的所有输入:http://jsfiddle.net/28k59uhj/2/

更新:

如果不使用实际页面,我很难知道如何准确找到您正在寻找的元素。这是另一个尝试:

var isCandidateRegion=function(node){
    return (node.innerText.indexOf('Username')>-1 && node.innerText.indexOf('Hours')>-1);
};
//Find the last table in th document that contains 'Username' and 'Hours'
var candidateRegions=[].filter.call(document.querySelectorAll('table'),isCandidateRegion);
var targetRegion=candidateRegions[candidateRegions.length-1];
var isVisible=function(node){
    return (node.offsetWidth && node.offSetWidth >0) || (node.offsetHeight && node.offsetHeight>0);
};
var inputs=[].filter.call(targetRegion.querySelectorAll('input'),isVisible);
var usernameInput=inputs[0];
var hoursInput=inputs[1];
console.log(usernameInput,hoursInput);

JSFiddle: http://jsfiddle.net/28k59uhj/3/

如果只有一个表单有 2 个输入,你可以这样得到它,或者你可以做 document.form[0]

var inputs=document.getElementsByTagName('input');
inputs[0].value="username";
inputs[1].value="password";
<form>
  <input type="text"/> 
  <input type="text"/>
  </form>