Новый метод работы аддона для Решу ЕГЭ
UPD: больше не работает прикол
В прошлом посте мы рассмотрели краткую историю создания аддона “Инструменты и Ответы для Решу ЕГЭ” и старый принцип его работы, теперь пришло время рассказать какие изменения он претерпел и как работает его новая версия.
Перемены в жизни аддона “Инструменты и Ответы для Решу ЕГЭ”
Где-то 2 месяца назад я получил e-mail:
вот это письмо
и сразу принялся проверять работоспособность аддона, как оказалось, он и вправду перестал работать. Сайт стал возвращать ошибки, если поля “stat_id” (уникальный номер запущенного теста, присваиваемый при каждой новой попытке) и “test_id” (номер теста) не соответствовали значениям, которые ожидал сайт.
Сначала я просто сдался, убрал аддон из магазина и уже смирился с тем, что прийдется снова гуглить ответы, но спустя несколько недель меня настиг неожиданный порыв мотивации и я начал искать новые интересные свойства API сайта.
Поиски новых методов
Я обследовал огромную часть сайта, узнал немало интересных вещей о принципах его работы (отдельный пост про приколы API будет потом) и выделил для себя три возможных пути получения ответов:
- Найти способ преобразовывать ID заданий внутри теста в обычные ID заданий (если открыть код элемента в тесте, то можно заметить, что тела заданий имеют уникальные ID, которые не соответствуют их другим ID, с помощью которых можно было бы искать сами задания и ответы к ним)
- Обнаружить способ клонировать контрольные работы или же задания из них себе с раздел “Учителю”
- Придумать еще один метод, который заставил бы сайт отдать верные ответы при решении контрольной работы
Третий путь, скорее всего, был наиболее сложным, ведь там я даже не задумывался о том, что пустые работы, которые бы отправлялись с целью получения ответов, были бы видны учителю. Была возможность создать бота, который бы так отсылал работы и возвращал ответы, но я решил подольше остановиться на 2 первых способах.
Много дней ушло на исследования первого способа, но я так и не смог найти ни одного метода, который бы мог превратить ID заданий внутри теста в их обычный ID, поэтому я занялся вторым путём, который, к сожалению, тоже ни к чему не привел.
Но потом я заметил, что каждый раз после завершения ввода ответа внутри теста на сервер отправляется запрос:
1 | https://ege.sdamgia.ru/test?a=save_part&ajax=1 |
внутри которого есть форма:
1 | stat_id={{stat_id}}&name=answer_{{номер задания}}_{{его вторичный id}}&answer[]={{ответ}} |
Это снова настроило меня на первый путь, ведь наверняка эти запросы что-то куда-то сохраняют, а, возможно, оттуда можно будет увидеть и оригинальный ID вопроса.
stat_id и раздел статистики
Я решил обратить внимание на раздел “Моя статистика”. Я не надеялся на многое, ведь те запросы, о которых я говорил ранее, в первую очередь сохраняли данные для удобства пользователя - если тест перезагрузить, эти сохраненные ответы вернутся туда, куда вы их ранее записывали. Но факт того, что задание считалось как “неверно выполненное” в каталоге после этого запроса (это я заметил списывая варианты вручную), давал немного уверенности в том, что эти вопросы сохраняются на сайте куда-то еще.
Итак, “stat_id” используется как раз для загрузки ранее сделанных заданий перезагруженного варианта, но присутствие там слова “stat” указывает также на его связь с разделом статистики. Эта мысль помогла мне заметить, что все варианты, которые я мог посмотреть в статистике, загружались по запросу, который брал в аргументы тот самый “stat_id”.
Тесты, которые еще не решены, не высвечиваются в меню статистики, а контрольные работы там можно смотреть только после проверки учителя, но если взять “stat_id” из теста, который решается в данный момент, и подать запрос самостоятельно, то можно получить список всех заданий варианта с их исходными ID, но только те, с которыми был отправлен запрос сохранения и только в том порядке, в котором эти запросы были отправлены.
Новый принцип работы аддона
Теперь аддон запускает в контексте самой страницы теста скрипт, который с помощью Fetch API создает запросы на сохранение заданий (с заданиями части C понадобилось поработать отдельно, они не хотели сохранятся сразу как части A и B), потом просто открывает страницу статистики для значения “stat_id” данного теста. Новый режим авторешения даже не открывает лишних вкладок, решает все прямо внутри страницы.
Исходный код тут: https://github.com/hyperClink/new-tools-for-reshu-ege
Бонус: как списать (почти) любой вариант самостоятельно
- По порядку в каждое поле для ответа введите символ, не забудьте после этого выйти из данного поля (в каком порядке были введены ответы, в таком и будут даны верные ответы на вопросы)
- Перезагрузите страницу
- Выберите “Продолжить начатый вариант” из появившегося окна
- Скопируйте значение “continue” из адресной строки
- В разделе “Моя статистика” нажмите на любую из дат выполненных вами тестов (если таковых нет, просто отошлите пустой тренировочный вариант)
- Замените значение “test” на скопированное ранее значение “continue”
- Готово! Все задания с решениями перед вами.