В лицее хотели учиться 200 детей. Но школа набирала только 75 учеников. На указанном сайте шёл обратный отсчёт.
В назначенное время открывалась форма и родители начинали её заполнять. Форма появлялась частями — какая-то информация подгружалась с другой страницы.

Первое, что пришло на ум: по клику на кнопку копировать информацию в буфер обмена, тем самым сокращая время на выделение текста [инструмент сделала, чтобы любой мог воспользоваться — не нужно уметь программировать].
Редактор JavaScript Mozilla Firefox
Если нажать одновременно Shift F4, появится окошко, куда можно написать любой JavaScript и выполнить его, нажав кнопку "Запустить". Например, вот так можно вывести на экране сообщение
alert("Моё сообщение");
Скрипт автоматического заполнения полей формы
Второго шанса у меня не было, я не знала что могли изменить разработчики, какие данные будут передаваться, поэтому перестраховалась. В редакторе запускала такой JS.
// данные заявителя
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'}); // если текстовые поля больше 5px
if (!razstart) razstart = timestamp;
if (raz.length < 5) { // пока таких полей не станет больше 5, повторять функцию (надёжнее чем задержка setTimeout и setInterval)
requestAnimationFrame(step00);
} else { // когда таких полей станет больше 5, заполнить их
raz[0].value = 'Иванова';
raz[1].value = 'Наталья';
raz[2].value = 'Ивановна';
raz[3].value = '0000';
raz[4].value = '000000';
raz[5].value = 'ОТДЕЛОМ УФМС РОССИИ ПО ...';
raz[6].value = '01.01.2009';
for (var i = 0; i < 7; i++) { // эмулировать (имитировать) действия посетителя
raz[i].dispatchEvent(new Event("change"));
raz[i].dispatchEvent(new Event("change"));
raz[i].dispatchEvent(new Event("keydown"));
raz[i].dispatchEvent(new Event("keyup"));
}
requestAnimationFrame(step01); // запустить следующую функцию
}
}
// данные о ребёнке
var razstart = null; function step01(timestamp) {
var raz = Array.prototype.slice.call(document.querySelectorAll('input[type="text"], input:not([type])')).filter(function(a) {return (a.offsetHeight > '5') && (a.value != 'Наталья') && (a.value != 'Ивановна') && (a.value != '0000') && (a.value != '000000') && (a.value != 'ОТДЕЛОМ УФМС РОССИИ ПО ...') && (a.value != '01.01.2009')}); // если текстовые поля больше 5px и в них не встречается ранее заполненный текст (искл. фамилия)
if (!razstart) razstart = timestamp;
if (raz.length < 3) {
requestAnimationFrame(step01);
} else {
raz[1].value = 'Иванов';
raz[2].value = 'Иван';
raz[3].value = 'Иванович';
raz[4].value = '01.01.2009';
raz[5].value = 'город Самара';
raz[6].value = 'III-ЕР';
raz[7].value = '000000';
for (var i = 1; i < 8; i++) {
raz[i].dispatchEvent(new Event("change"));
raz[i].dispatchEvent(new Event("change"));
raz[i].dispatchEvent(new Event("keydown"));
raz[i].dispatchEvent(new Event("keyup"));
}
requestAnimationFrame(step02);
}
}
// адрес регистрации
var razstart = null; function step02(timestamp) {
var raz = Array.prototype.slice.call(document.querySelectorAll('input[type="text"], input:not([type])')).filter(function(a) {return (a.offsetHeight > '5') && (a.value != 'Иванова') && (a.value != 'Наталья') && (a.value != 'Ивановна') && (a.value != '0000') && (a.value != '000000') && (a.value != 'ОТДЕЛОМ УФМС РОССИИ ПО ...') && (a.value != '01.01.2009') && (a.value != 'Иванов') && (a.value != 'Иван') && (a.value != 'Иванович') && (a.value != '01.01.2009') && (a.value != 'город Самара') && (a.value != 'III-ЕР') && (a.value != '000000')});
if (!razstart) razstart = timestamp;
if (raz.length < 3) {
requestAnimationFrame(step02);
} else {
raz[0].value = 'Самарская область';
raz[2].value = 'Самара';
raz[3].value = 'Улица';
raz[4].value = '0';
raz[5].value = '0';
for (var i = 0; i < 6; i++) {
raz[i].dispatchEvent(new Event("change"));
raz[i].dispatchEvent(new Event("change"));
raz[i].dispatchEvent(new Event("keydown"));
raz[i].dispatchEvent(new Event("keyup"));
}
Array.prototype.slice.call(document.querySelectorAll('button')).filter(function(a) {return (a.offsetHeight > '5') && (a.innerHTML.indexOf('егистрац') != -1)})[0].dispatchEvent(new Event("click")); // эмулировать нажатие на кнопку больше 5px и содержащую текст 'егистрац'
requestAnimationFrame(step03);
requestAnimationFrame(step04);
requestAnimationFrame(step05);
}
}
// контактные данные
var razstart = null; function step03(timestamp) {
var raz = Array.prototype.slice.call(document.querySelectorAll('button')).filter(function(a) {return (a.offsetHeight > '5') && (a.innerHTML.indexOf('mail') != -1)});
if (!razstart) razstart = timestamp;
if (raz.length == 0) {
requestAnimationFrame(step03);
} else {
raz[0].dispatchEvent(new Event("click"));
var razI = Array.prototype.slice.call(document.querySelectorAll('input[type="email"]')).filter(function(a) {return (a.offsetHeight > '5') && (a.value == '')})[0];
razI.value = 'n.mitra@yandex.ru';
razI.dispatchEvent(new Event("change"));
razI.dispatchEvent(new Event("change"));
}
}
// кнопка "Загрузить данные по требуемым свойствам"
var razstart = null; function step04(timestamp) {
var raz = Array.prototype.slice.call(document.querySelectorAll('button')).filter(function(a) {return (a.offsetHeight > '5') && (a.innerHTML.indexOf('агруз') != -1)});
if (!razstart) razstart = timestamp;
if (raz.length == 0) {
requestAnimationFrame(step04);
} else {
raz[0].dispatchEvent(new Event("click"));
}
}
// флажок "Я даю согласие на обработку персональных данных"
var razstart = null; function step05(timestamp) {
var raz = Array.prototype.slice.call(document.querySelectorAll('input[type="checkbox"]')).filter(function(a) {return a.offsetHeight > '5'});
if (!razstart) razstart = timestamp; if (raz.length == 0) {
requestAnimationFrame(step05);
} else {
raz[0].checked = true; // поставить галку
raz[0].dispatchEvent(new Event("click")); // эмулировать клик
raz[0].dispatchEvent(new Event("click"));
}
}
С выпадающими списками на сайте что-то перемудрили, я решила не искушать судьбу :)
5 комментариев:
полторы минуты... ужас
Отправить комментарий