THIS IS A FREE SOFTWARE, FOR PERSONAL USE.
This software is offered as it is, and i'm not responsible for the use of this software. The purpose of this software is to help the user to catch the appointment for personal use only.
DO NOT CHARGE PEOPLE TO CATCH AN APPOINTMENT WITH HELP OF THIS SOFTWARE.
I had a working prototype of the bot, working with proxies, and the Tor network so we could bypass the error 500, when the website banned our IP address for a few minutes, but the web updated and now they blocked most proxies and non residential IP addresses, so everything i did was useless.
The bot works as expected right now with your own IP address, still you need to add more cycles as the website will block your IP after a few tries for a few minutes.
As you will need to buy residential proxies, and we still don't know if it will work, i won't publish the new version of the bot.
This Selenium automatization script helps to catch cita timeslot for Spanish CNP/Extranjería.
Enable your speakers and wait for "ALARM ALARM ALARM" message :) Next you'll have to confirm an appointment via SMS code.
It can make a reservation automatically if you set up anti-captcha, webhooks and IFTTT applet on your phone, read instructions below.
Please Open an issue and read the messages, will try to fix and add new features as requested.
If you want a support for new procedure or province, open an issue or better a pull request. The following things are fully supported at the moment:
Procedures:
- POLICIA - SOLICITUD ASILO (PRIMERA CITA)
- POLICIA - RECOGIDA DE TARJETA DE IDENTIDAD DE EXTRANJERO (TIE)
- POLICIA-AUTORIZACIÓN DE REGRESO
- POLICIA-CARTA DE INVITACIÓN
- POLICIA-CERTIFICADO DE REGISTRO DE CIUDADANO DE LA U.E.
- POLICIA-CERTIFICADOS (DE RESIDENCIA, DE NO RESIDENCIA Y DE CONCORDANCIA)
- POLICIA-CERTIFICADOS Y ASIGNACION NIE
- POLICIA-CERTIFICADOS Y ASIGNACION NIE (NO COMUNITARIOS)
- POLICIA-TOMA DE HUELLAS (EXPEDICIÓN DE TARJETA) Y RENOVACIÓN DE TARJETA DE LARGA DURACIÓN
- POLICÍA-EXP.TARJETA ASOCIADA AL ACUERDO DE RETIRADA CIUDADANOS BRITÁNICOS Y SUS FAMILIARES (BREXIT)
Provinces:
- Barcelona
- Santa Cruz de Tenerife
Other provinces are also supported if you leave offices
empty and that way try and get an appointment in a random office, but if you're required to select a specific office (as in case of OperationType.RECOGIDA_DE_TARJETA
), you should figure out office ids for your province from the appropriate page on your own.
-
Install Python 3.8.
-
pip install -r requirements.txt
-
Install Google Chrome.
-
Download chromedriver and put it in the PATH (Python dir from step 1 should work).
4.1. [Windows only] Download wsay and put it in the PATH.
-
Copy example file and fill your data, save it as
grab_me.py
. -
Run
python grab_me.py
orpython3 grab_me.py
, follow the voice instructions.
-
Get API key from https://anti-captcha.com ($5 is enough, trust me! :) and set
auto_captcha=True
. -
Get API key from https://webhook.site and set it to
sms_webhook_token
. -
Install IFTTT or any other automation tool on your phone and create an applet redirecting SMS having text "CITA PREVIA" to the temporary email you got from https://webhook.site.
-
example1.py
— Recogida de tarjeta -
example2.py
— Toma de huellas -
example_asilo.py
— Primera cita asilo
@dataclass
class CustomerProfile:
anticaptcha_api_key: Optional[str] = None
auto_captcha: bool = True
auto_office: bool = True
chrome_driver_path: str = None
min_date: Optional[str] = None # "dd/mm/yyyy"
max_date: Optional[str] = None # "dd/mm/yyyy"
save_artifacts: bool = False
sms_webhook_token: Optional[str] = None
wait_exact_time: Optional[list] = None # [[minute, second]]
province: Province = Province.BARCELONA
operation_code: OperationType = OperationType.TOMA_HUELLAS
doc_type: DocType
doc_value: str # Passport? "123123123"; Nie? "Y1111111M"
name: str
country: str = "RUSIA"
year_of_birth: Optional[str] = None
card_expire_date: Optional[str] = None # "dd/mm/yyyy"
phone: str
email: str
offices: Optional[list] = field(default_factory=list)
except_offices: Optional[list] = field(default_factory=list)
reason_or_type: str = "solicitud de asilo"
-
anticaptcha_api_key
— Anti-captcha.com API key (not required ifauto_captcha=False
) -
auto_captcha
— Should we use Anti-Captcha? For testing purposes, you can disable it and trick reCaptcha by yourself. While on appointment selection page, do not select a slot or click buttons, just pretend you're a human reading the page (select text, move cursor etc.) and press Enter in the Terminal. -
auto_office
— Automatic choice of the police station. IfFalse
, again, select an option in the browser manually, do not click "Accept" or "Enter", just press Enter in the Terminal. -
chrome_driver_path
— The path where the chromedriver executable is located. For Linux leave it as it is in the example files. For Windows change it to something like:chrome_driver_path="C:\\Users\\youruser\\AppData\\Local\\Programs\\Python\\Python38-32\\chromedriver.exe",
This is just an example, enter the path where you saved the program. -
min_date
— Minimum date for appointment in "dd/mm/yyyy" format. Appointments available earlier than this date will be skipped. -
max_date
— Maximium date for appointment in "dd/mm/yyyy" format. Appointments available later than this date will be skipped. -
sms_webhook_token
— webhook.site API key, used to automate SMS confirmation. -
wait_exact_time
— Set specific time (minute and second) you want it to hitSolicitar cita
button -
province
— Province name (Province.BARCELONA
,Province.S_CRUZ_TENERIFE
). Other provinces. -
operation_code
— Procedure (OperationType.TOMA_HUELLAS
). All procedures. -
doc_type
—DocType.NIE
,DocType.PASSPORT
orDocType.DNI
-
doc_value
— Document number, no spaces -
name
— First and Last Name -
year_of_birth
— Year of birth, like "YYYY" -
country
— Country (RUSIA by default). Copypaste yours from the appropriate page. -
card_expire_date
— Card Expiration Date. Probably, it's not important at all, leave it empty. -
phone
— Phone number, no spaces, like "600000000" -
email
— Email -
offices
— Required field forOperationType.RECOGIDA_DE_TARJETA
! If provided, script will try to select the specific police station or end the cycle. ForOperationType.TOMA_HUELLAS
it attempts to select all provided offices one by one, otherwise selects a random available. Supported offices. -
except_offices
— Select offices you would NOT like to get appointment at. -
reason_or_type
— "Motivo o tipo de solicitud de la cita". Required for some cases, likeOperationType.SOLICITUD_ASILO
Related blog post
For Windows, escape paths with additional backslash, e.g. C:\\Users\\user\\cita-bot\\
If you feel like the script is being stuck at the office selection page — it's not, it refreshes the page 12 times (maximum allowed) until the office is found and then starts over.
SMTH BROKEN: [Errno 13] — that means the script is unable to write a file to file system, try to adjust permissions for it, or set save_artifacts=False
to disable saving snapshots for offices/appointments.
To generate script for Autofill
extension use --autofill
option. This approach allows you to forget about captcha.
$ python grab_me.py --autofill