Русский
Русский
English
Статистика
Реклама

Госуслуги и запись на прием. Живая очередь?

Вероятно вы сталкивались с ситуацией, когда необходимо записаться на прием, а свободных талонов нет. Статья о том, как удалось автоматизировать процесс ожидания на примере оформления загранпаспорта.

После одобрения электронного заявления на загранпаспорт, необходимо записаться на личное посещение, чтобы принести оригиналы документов и сделать фото. Заходя на госуслуги несколько дней в разное время, свободных талонов так и не обнаружилось. Не хотелось продолжать такую лотерею.

Решение довольно простое. Когда пользователь выбирает адрес на карте, отправляется запрос, который возвращает доступное время посещения. Он виден в консоле разработчика. Оттуда узнаем о URL и параметрах.

def send_post(cookies):    url = 'https://www.gosuslugi.ru/api/lk/v1/equeue/agg/slots'    headers = {'Content-type': 'application/json;charset=UTF-8', 'Accept':'application/json', 'Cookie':cookies}    payload = {'eserviceId':'','serviceId':[''],'organizationId':[''],'parentOrderId':'','serviceCode':'','attributes':[]}    return post(url, data=dumps(payload), headers=headers)

Возникает проблема. Чтобы получить успешный ответ, к запросу требуется добавить куки. Их можно скопировать из этого же запроса. Но они будут действовать лишь несколько часов. Поэтому при получении ошибки (401) проходим авторизацию и копируем новые куки, сохраняя их в файл. Когда обнаружим свободные места, откроем браузер на этой странице.

Для реализации понадобился Python, Selenium и планировщик заданий Windows. Таким образом, получаем следующий основной код:

from webbrowser import open as open_tabfrom selenium import webdriverfrom datetime import datetimefrom requests import postfrom json import dumpsfrom os import pathdef main():    response = send_post(read_cookies())    if response.status_code == 401:        write_cookies(get_cookies())        write_log('Ошибка 401. Обновлены куки.')        main()        return    elif response.status_code == 200:        length = len(response.json()['slots'])        if length > 0:            write_log('Есть мест: ' + length)            open_tab(TARGET_LINK, new=1)        else:             write_log('Нет мест')    else:        write_log('Ошибка {0}'.format(response.status_code))

Чтобы получить куки, с помощью Selenium переходим на страницу входа, находим поля для ввода и вставляем логин с паролем. На практике не удалось авторизоваться без оконного режима. Поэтому раз в несколько часов станет появляться окно браузера на пару секунд. Чтобы получить нужный набор кук, переходим на страницу, где выбирается адрес ведомства TARGET_LINK.

def get_cookies():    options = webdriver.ChromeOptions()    options.add_argument('--no-sandbox')    options.add_argument('--minimal')    driver = webdriver.Chrome(executable_path=DRIVER_FILE, options=options)    driver.get('https://esia.gosuslugi.ru/')    driver.implicitly_wait(7)    input_login = driver.find_element_by_id('login')    input_password = driver.find_element_by_id('password')    btn_enter = driver.find_element_by_id('loginByPwdButton')    input_login.send_keys(LOGIN)    input_password.send_keys(PASSWORD)    btn_enter.click()    driver.get(TARGET_LINK)    cookies = driver.get_cookies()    driver.close()    return cookies

Для запроса, куки форматируются в имя=значение;

raw_cookies = ''.join(['{}={}; '.format(i['name'], i['value']) for i in cookies])

Осталось настроить планировщик заданий Windows. Прямой запуск скрипта .py у меня не получился. Поэтому через .bat одна команда python "script.py". Да, при этом открывается окно консоли. Есть внешние программы, позволяющие запустить консоль скрытно.

В результате, на третий день и 240 запусков в районе 17 часов появилось свободное место для записи. Думаю, что можно пойти дальше и через последующие запросы сделать автозапись.

Источник: habr.com
К списку статей
Опубликовано: 26.04.2021 14:21:23
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Python

Госуслуги

Автоматизация

Личный опыт

Selenium

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru