Как настроить таргетинг на поля ввода формы, имена которых меняются каждый раз после перезагрузки страницы в iMacros?

Я пытался настроить таргетинг на форму на сайте, но угадайте, что я понял после повторного запуска скрипта iMacros после записи более 5 раз … что имя формы и имя входа меняются при каждой перезагрузке страницы. нет другого атрибута, с помощью которого я могу нацелиться на это, используя 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 входа на сайте, здесь это скриншот, пожалуйста, как:

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

1

Решение

Основываясь на 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/

1

Другие решения

вы можете получить это так, если есть только одна форма с 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>
0

По вопросам рекламы [email protected]