Как заполнить некоторые хитрые формы автоматически с помощью JavaScript - PullRequest
0 голосов
/ 21 июня 2019

Мне нужно выяснить, как автоматически заполнять некоторые формы на определенной веб-странице (чтобы автоматизировать большую часть обычной ручной работы нескольких человек), и я не могу реализовать это с помощью традиционных методов, которые прекрасно работают на других страницах. Я сделал рисунок, который помогает мне объяснить проблему - здесь это . HTML-код страницы приведен в конце этого поста (некоторые его части, соответствующие интересующим элементам, показаны на рисунке). Язык страницы русский, но я вставил необходимые пояснения. Я должен заявить, что я полный нуб в javascript и все, что я могу, это использовать встроенный простой редактор (Firefox) для запуска простых кодов, однако этого было достаточно до этой задачи. Помогите мне, пожалуйста.

Существует четыре типа элементов формы, и мне удалось справиться с первым типом текста (случай 1 на рисунке). Я запустил следующий код и вуаля. Аналогичный метод работал для всех текстовых полей. Я также могу указать имя нужного поля, и оно также отлично работает.

requestAnimationFrame(step00);
var razstart = null; 
function step00(timestamp) {
     var raz=Array.prototype.slice.call(document.querySelectorAll('input[type="text"], input:not([type])')).filter(function(a) {return a.offsetHeight > '5'});  

raz[0].value = 'Пручкина Анна Артемовна'; 

Что касается других случаев, я сломал свой мозг, пытаясь понять, как с ними справиться. Я особенно разочарован случаем 3, который выглядит как флажок - и мне удалось проверить / снять галочку с помощью сценария на других сайтах. Однако, насколько я предполагаю, эта вещь на самом деле здесь не является флажком (я узнал через вывод оповещения, что его тип также является текстовым), и я понятия не имею, как он работает - я вставил его код - и другие '- и я могу предоставить любую дополнительную информацию, если это необходимо.

Ничего из перечисленного не работает:

document.getElementsByName("enf_start_staffw")[0].checked=true;
document.getElementsByName("enf_start_staffw")[0].value=1;
document.getElementsByName("enf_start_staffw")[0].click();

Вероятно, важным моментом является то, что для случаев 2-4, когда вы вручную нажимаете на элемент / выбираете опцию, на веб-странице появляется небольшой индикатор с надписью «Сохранение». Возможно, это как-то связано с решением проблемы, однако, оно также появляется, когда вы заканчиваете писать текст вручную в случае 1, что не мешает работе сценария.

Также я пытался эмулировать клики в определенных точках страницы. Это работает, но вряд ли возможно сделать некоторую автоматизацию, основанную на этом, чтобы другие люди могли использовать это.

Ждем вашей помощи!

<!-- <div main-menu-item> --> <!--div main-line>
Информационно-аналитическая система РНФ
Информация об исполнителе

Информация об исполнителе проекта

function returnToPrevPage(f, st) { window.location.href='/site/user/executant-insert?rid=' + st; } function setAge(e, bday) { var month = 0; var year = 0; if( bday != "" ) { var arr = bday.split('.'); if(arr.length == 2) { month = parseInt(arr[0]); year = parseInt(arr[1]); } if(year > 0) { if(month > 0) {//2 as 02 var first_day_of_month = year + "-" + arr[0] + "-" + "01"; //1975-12-01 var birth = new Date(first_day_of_month); var report_date = "2019-06-30";//"2019-12-31"; var now = new Date(report_date); var diff = now.getFullYear() - birth.getFullYear(); var age = now.setFullYear(1972) < birth.setFullYear(1972) ? diff - 1 : diff; var v = { 'enf_agew': age.toString() }; modificationRequest(e, v); } } } } function setOther(e, param, def) { if(e.value === '1') { var v; if(param == 'sti') { v = { 'enf_scientist_iw': '' , 'enf_sti_state_diffw' : ''}; } if(param == 'stru') { v = { 'enf_scientist_ruw': '' , 'enf_stru_state_diffw' : ''}; } for(var i in v) { var vv = {}; vv[i] = v[i]; modificationRequest(e, vv) } def().done(function(x) { document.reload(); }); } else def() }
6.9. Информация о вознаграждении за счет гранта членов научного коллектива (в том числе руководителя проекта) за выполнение проекта
(заполняется на каждого члена научного коллектива, указанного в приказе (приказах) о формировании научного коллектива)


Пручкина Анна Артемовна





без ученой степени без ученой степени кандидат наук доктор наук

0

Отметьте галочками ТОЛЬКО НЕОБХОДИМОЕ и укажите, изменялся ли статус отмеченного. Возможен выбор нескольких статусов.
Пример: в отчетном периоде исполнитель-студент (месяц и год рождения: 12.1995) стал аспирантом:
отмечается статус «студент», статус изменялся: «да»;
отмечается статус «аспирант», статус изменялся: «нет»;
отмечается статус «без ученой степени до 30 лет (включительно)», статус изменялся: «нет»;
отмечается статус «исследователь в возрасте до 39 лет (включительно)», статус изменялся: «нет».
В поле «Статус «исследователь в возрасте до 39 лет (включительно)» изменился в отчетном периоде» выбирается ответ «нет».
Если в списке статусов не отмечен статус «исследователь в возрасте до 39 лет (включительно)», а также изменялся он или нет (если изменялся - обязательно укажите дату), то вознаграждение этого исполнителя НЕ БУДЕТ включено в автоподсчет суммы вознаграждения исполнителей до 39. Таким образом, для участников до 39 лет (включительно), чье вознаграждение нужно подсчитывать автоматически, статус «исследователь в возрасте до 39 лет (включительно)» отмечается дважды (в списке статусов и в поле «Статус «исследователь в возрасте до 39 лет (включительно)» изменился в отчетном периоде»).
У не используемых для данного члена научного коллектива статусов НЕ НАДО отмечать изменения галочками.

студент очной формы обучения    cтатус изменился в отчетном периоде
аспирант (интерн, ординатор, адъюнкт) очной формы обучения    cтатус изменился в отчетном периоде
член научного коллектива без ученой степени до 30 лет (включительно)    cтатус изменился в отчетном периоде
кандидат наук в возрасте до 35 лет (включительно)    cтатус изменился в отчетном периоде
исследователь в возрасте до 39 лет (включительно)    cтатус изменился в отчетном периоде
российский ученый    cтатус изменился в отчетном периоде
иностранный ученый*    cтатус изменился в отчетном периоде

* В том числе граждане Российской Федерации, не являющиеся на момент включения в состав научного коллектива налоговыми резидентами Российской Федерации.
или иное

Статус «исследователь в возрасте до 39 лет (включительно)» изменился в отчетном периоде:* нет да, статус сменился по возрасту

Дата изменения статуса

Необходимо указать форму отношений с организацией.

трудовой договор 
гражданско-правовой договор 









* * 6. 1022 9 +0,12. Реквизиты документа об исключении из состава научного коллектива (при наличии) <тег dfn fctl name = "enf_doc_endw" tip = "Формат ввода: Приказ ... № ... от ... (например: Приказ №321 от 28.12.2018 г .) «. label = "введите при наличии:" тема с изменяемым размером содержимого = "swift" maxlength = 0>

<тег dfn vtype = N fctl name = "enf_money1w" label = "введите:" maxlength = 6 vnorm = "normNumberCommaToDot (this)" tip = "Указывается в тыс.руб. Сумму необходимо округлить до 1 знака после запятой (если есть дробная) часть). Пример: 302441 руб. следует вводить как 302,4 тыс.руб. "theme =" swift "maxlength = 38 требуется re =" / ^ \ d + (?: [.] [0-9] {1})? $ / "vmin =" '0' "vmax =" '2000' "> & nbsp; тыс. руб.

тег тыс. руб.

Если информация об исполнителе не проходит проверку после исправления ошибок в полях, нажмите кнопку Обновить , затем снова нажать кнопку «Проверить» (ниже).
Если после однократного нажатия кнопки «Обновить» проверка
Если проверка информации об, то все равно не пройдено - следовательно, ошибка не была исправлена.

проверить

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...