Expand Cut Tags

No cut tags
danielzorin: (Квадрат)
[personal profile] danielzorin
Недавно возникла необходимость помочь [livejournal.com profile] ser_koteiko получить визу в Венгрию. У этой страны нет визового центра. С одной стороны, это плюс: экономим около 1000 рублей. С другой стороны, чтобы подать документы, надо записаться на сайте консульства на определенную дату. Если взглянуть на календарь, то можно увидеть, что ближайшая возможность подать документы - где-то через месяц. Что же делать, если нужно сделать это раньше?

Онлайн-запись в принципе можно отменить, и время от времени люди делают это по разным причинам. Можно сидеть весь день и жать F5, ожидая, когда что-то отменится. Реально эксперименты с сайтом показали, что отмена происходит не автоматически. В какой-то момент там приходит человек и очищает все отмененные слоты. Происходит это в рабочее время, так что надежнее всего рефрешить страницу часов в 8-9 утра. Но еще лучше - написать простенькую программку, которая все сделает сама!
Решил выложить программу в открытый доступ. У кого руки не кривые, тот разберется, как ее запустить. Нужны Python 2.7 и модуль mechanize, а в переменные сверху надо вписать свои данные. Лучше делать на загранпаспорт, т.к. с русскими буквами программку придется чуть-чуть модифицировать.


import time, mechanize

# Last name
last="Lamperouge"
# First name
first="Lelouch"
phone = "+79011234567"
# Passport serie 
pass1 = "72"
# Passport number
pass2 = "1234567"
email = "lelouch@lelouch.com"
url = "https://hungaria.embassytools.com/ru/calendar?m=06.2014"

chrome = mechanize.Browser()
html = ""
while True:
    try:
        r = chrome.open(url)
        html = r.read()
    except:
        continue
    ind = html.find("id=\"activeslot\"")
    if ind == -1:
        time.sleep(10)
    else:
        slots = []
        while True:
            html = html[ind+1:]
            id = html[html.find("slotId") + 8:html.find("slotId") + 15]
            idint = int(id)
            slots.append(idint)
            ind = html.find("id=\"activeslot\"")
            if ind == -1:
                break
        slots.sort()
        for idint in slots:
            id = str(idint)
            try:
                r = chrome.open("https://hungaria.embassytools.com/ru/registrationForm?slot=" + id)
                chrome.select_form(nr=0)
            except:
                continue
            date = chrome["appointmentDate"]
            if (int(date[8:10]) < 17) and (int(date[8:10]) > 8):
                print "using slot " + id + date
                chrome["lastName"] = last
                chrome["firstName"] = first
                chrome["PhoneNumber"] = phone
                chrome["email"] = email
                chrome["passportSerie"] = pass1
                chrome["passportNumber"] = pass2
                r = chrome.submit()


Для успешной операции надо днем мониторить почту. Когда происходит запись, на почту приходит письмо, в котором надо кликнуть на ссылку для подтверждения, и сделать это надо в течение 6 часов.

Date: 2014-06-12 10:48 am (UTC)
From: [identity profile] lusfert.livejournal.com
Такое полезно ещё для финского консульства и сайта РЖД. В последнем с опцией поиска ближайшей открытой кассы и отсылом смс "плацкарт на Калинград появился, ближайшая касса там-то, перерыв тогда-то".

Date: 2014-06-12 10:55 am (UTC)
From: [identity profile] juan.livejournal.com
Мм, а зачем касса РЖД? Можно же купить на сайте.
А, я забыл, что в Калининград только в кассах продаются. Но для других направлений это не особо актуально.
Edited Date: 2014-06-12 10:56 am (UTC)

Date: 2014-07-03 08:41 am (UTC)
From: (Anonymous)
большое спасибо за скрипт, зарегался в первое же рабочее утро.

Profile

danielzorin: (Default)
Daniel A. Zorin

March 2024

S M T W T F S
      12
3 45 6789
10111213141516
17181920212223
24252627282930
31      

Most Popular Tags

Page Summary

Style Credit

Page generated Jun. 26th, 2025 12:30 pm
Powered by Dreamwidth Studios