Мне нужно выяснить, как автоматически заполнять некоторые формы на определенной веб-странице (чтобы автоматизировать большую часть обычной ручной работы нескольких человек), и я не могу реализовать это с помощью традиционных методов, которые прекрасно работают на других страницах. Я сделал рисунок, который помогает мне объяснить проблему - здесь это . 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, что не мешает работе сценария.
Также я пытался эмулировать клики в определенных точках страницы. Это работает, но вряд ли возможно сделать некоторую автоматизацию, основанную на этом, чтобы другие люди могли использовать это.
Ждем вашей помощи!
<!--&& !@$_REQUEST["q"] -->
<!-- <div>is_user
-->
<!-- <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; тыс. руб.
тег
тыс. руб.
Если информация об исполнителе не проходит проверку после исправления ошибок в полях, нажмите кнопку Обновить , затем снова нажать кнопку «Проверить» (ниже).
Если после однократного нажатия кнопки «Обновить» проверка
Если проверка информации об, то все равно не пройдено - следовательно, ошибка не была исправлена.
проверить