CoderCastrov logo
CoderCastrov
Франция

Французские водительские права: Борьба за слоты для записи на экзамен

Французские водительские права: Борьба за слоты для записи на экзамен
просмотров
6 мин чтение
#Франция
Table Of Content

Введение:

В эпоху цифровой трансформации автоматизация превратилась из роскоши в необходимость. Представьте себе ситуацию: вы находитесь во Франции и стремитесь получить водительские права, но путь к записи на желаемый экзамен напоминает навигацию по лабиринту. Тысячи надеющихся борются за ограниченное количество слотов, что делает процесс почти невозможным. Многие обращаются за помощью в автошколы, что часто сопряжено с большими затратами.

Но что, если бы был способ уравнять шансы? В этом блоге мы представляем вам скрипт на Python, который готов изменить способ записи на вождение во Франции. Попрощайтесь с утомительным обновлением веб-страниц. Этот скрипт не только автоматизирует процесс записи на сайте permisdeconduire.gouv.fr, но также интегрируется без проблем с Slack, предоставляя уведомления в режиме реального времени для вашего удобства.

Давайте глубже погрузимся в этот скрипт, разобрав его компоненты и поняв настройку с нуля.

Отказ от ответственности:_ Эта статья служит исключительно в качестве учебного ресурса, проливая свет на механизмы автоматизации и написания скриптов на Python. Она не предназначена для предоставления советов или поощрения использования ботов или скриптов с целью обхода политики веб-сайта или нарушения условий использования. Использование таких инструментов может повлечь юридические последствия, и настоятельно рекомендуется читателям быть осторожными и действовать в соответствии с условиями использования любого веб-сайта, с которым они взаимодействуют. Действуйте на свой страх и риск, и всегда придерживайтесь этичного и ответственного использования технологий._

Предварительная настройка:

Прежде чем мы погрузимся в скрипт, необходимо настроить наше окружение. Вот Python-пакеты, которые вам нужно установить:

pip install selenium
pip install anticaptchaofficial
pip install requests
pip install logging

Часть 1: Импорт необходимых модулей

import time
import logging
from anticaptchaofficial.recaptchav2proxyless import *
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

В этом разделе скрипта импортируются все необходимые модули, которые облегчают парсинг веб-страниц, решение капчи и ведение журнала.

Часть 2: Интеграция с Slack для уведомлений

# Отправка сообщения в Slack
def send_to_slack(message):
    webhook_url = "ваш URL для Slack"
    slack_data = {'text': message}
    response = requests.post(webhook_url, json=slack_data, headers={'Content-Type': 'application/json'})

    if response.status_code != 200:
        raise ValueError(f"Запрос в Slack вернул ошибку {response.status_code}, ответ:\n{response.text}")

Эта функция предназначена для отправки уведомлений в указанный канал Slack. Интеграция с Slack позволяет получать уведомления о статусе бронирования в режиме реального времени прямо в вашем приложении Slack.

Часть 3: Обход Captcha с помощью сервиса Anti-Captcha

Одной из ключевых проблем при автоматизации процесса записи на вождение является преодоление постоянно бдительного механизма CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans Apart). Веб-сайты используют CAPTCHA, чтобы предотвратить перегрузку своих систем автоматическими ботами. Однако наш сценарий на Python изобретательно решает эту проблему с помощью интеграции сервиса Anti-Captcha.

Реализация функции solve_captcha не предоставляется в этой статье, но мы предлагаем вам найти ресурсы онлайн для решения капчи.


Часть 4: Понимание основного скрипта

В этом разделе мы разберем основной скрипт по секциям, предлагая подробное объяснение каждого шага, включенного в автоматизированный процесс бронирования.

4.1 Настройка WebDriver и переход на веб-сайт

# Инициализация WebDriver и переход на страницу
chrome_options = webdriver.ChromeOptions()
driver = webdriver.Chrome(options=chrome_options)
driver.get('http://candidat.permisdeconduire.gouv.fr/')

Мы инициализируем объект chrome_options, чтобы хранить любые настраиваемые параметры для Chrome WebDriver, затем инициализируем Chrome WebDriver с указанными параметрами. Затем скрипт переходит на официальный веб-сайт для бронирования водительских удостоверений.

4.2 Ожидание загрузки основных элементов

# Ожидание загрузки элементов
wait = WebDriverWait(driver, 10)
username = wait.until(EC.presence_of_element_located((By.ID, 'username')))
password = wait.until(EC.presence_of_element_located((By.ID, 'password')))
remember_me_checkbox = wait.until(EC.presence_of_element_located((By.ID, 'rememberMe')))

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

4.3 Ввод данных для входа

# Заполнение имени пользователя и пароля
username.send_keys('Ваше имя пользователя')
password.send_keys('Ваш пароль')
remember_me_checkbox.click()

Эти строки отвечают за автоматический ввод имени пользователя и пароля в соответствующие поля на веб-странице. Скрипт также автоматически устанавливает флажок "Запомнить меня".

4.4 Подготовка к обходу CAPTCHA

# Ожидание загрузки CAPTCHA
sitekey_element = wait.until(EC.presence_of_element_located((By.XPATH, '//*[@id="kc-captcha"]')))
sitekey_clean = sitekey_element.get_attribute('data-sitekey')

Скрипт ожидает появления элемента CAPTCHA на странице, идентифицируя его по XPath. Затем он извлекает значение атрибута data-sitekey из элемента CAPTCHA, что является важным шагом для обхода CAPTCHA на следующем этапе.

4.5 Обход CAPTCHA с использованием сервиса Anti-Captcha

# Решение CAPTCHA с использованием Anti-Captcha
g_response = solve_recaptcha(sitekey_clean)

Функция solve_recaptcha вызывается с параметром sitekey. Эта функция взаимодействует с сервисом Anti-Captcha, чтобы получить решение для CAPTCHA.

4.6 Обработка ответа CAPTCHA

После того, как наш скрипт на Python успешно получает действительный g_response от сервиса Anti-Captcha, он выполняет ряд важных операций, которые обеспечивают беспрепятственное продвижение через защищенный CAPTCHA этап процесса бронирования.

Первый шаг заключается в заполнении поля ответа CAPTCHA значением g_response, полученным от сервиса Anti-Captcha. Чтобы имитировать пользовательский опыт, скрипт симулирует появление галочки в поле CAPTCHA. Это важно, потому что некоторые веб-сайты используют JavaScript для отображения визуальной обратной связи пользователям при успешном прохождении CAPTCHA. С заполненным полем ответа CAPTCHA и симулированной галочкой скрипт теперь может включить и нажать кнопку входа или любую другую соответствующую кнопку действия на странице. Это делается с использованием возможностей WebDriver.

4.7 Навигация по процессу бронирования записи на прием

# Переход к процессу бронирования
reserve_exam_link = wait.until(EC.presence_of_element_located((By.XPATH, "//a[contains(text(), 'Réserver un examen')]")))
reserve_exam_link.click()
time.sleep(2)

autocomplete_input = wait.until(EC.presence_of_element_located((By.ID, 'id-departement-autocomplete')))
autocomplete_input.send_keys('Номер вашего отдела')
input_field = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".auto-complete__input")))
input_field.click()

# Выбор отдела из выпадающего списка
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.auto-complete__menu-list')))
dropdown_options = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, '.auto-complete__menu-list div')))
for option in dropdown_options:
    if " Ваш отдел с текстом " in option.text:
        option.click()
        break

# Нажатие кнопки поиска для проверки
rechercher_button = WebDriverWait(driver, 5).until(
    EC.element_to_be_clickable((By.CSS_SELECTOR, "button.sc-jGKxIK.jtNPTZ")))
rechercher_button.click()

Эти строки автоматизируют процесс навигации по процессу бронирования записи на прием, включая нажатие на ссылку «Réserver un examen», выбор соответствующего отдела и нажатие кнопки поиска.

4.8 Проверка доступности и отправка уведомлений

# Проверка доступности
page_source = driver.page_source
if "Aucune place d’examen disponible" in page_source:
   message= "Нет доступных мест для экзамена."
   logging.info("response: " + message)
else:
    send_to_slack("Место для экзамена может быть доступно, проверьте веб-сайт: http://candidat.permisdeconduire.gouv.fr/")

Эти строки отвечают за проверку доступности слотов для экзамена на основе исходного кода страницы и регистрируют ответ или отправляют уведомления через Slack в зависимости от результата.

4.9 Закрытие драйвера

# Подождать и закрыть соединение с драйвером
time.sleep(2)
driver.quit()

Скрипт приостанавливается на 2 секунды перед переходом к следующему шагу. Наконец, скрипт закрывает WebDriver, завершая сеанс. Полный скрипт можно сохранить в файле main.py.

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

Автоматизация скрипта:

Чтобы этот скрипт выполнялся ежедневно с 8:00 до 18:00 с интервалом между каждым выполнением от 5 до 10 минут, можно использовать инструменты планирования, такие как cron (для систем на основе Unix) или Планировщик задач (для Windows).

Вот пример настройки cron-задания, которое выполняет скрипт каждые 10 минут в указанный промежуток времени:

# Настройка cron-задания (выполняется каждые 10 минут с 8:00 до 18:00)
*/10 8-18 * * * /usr/bin/python3 /путь/к/вашему/main.py

Заключение:

В этой статье представлена пошаговая инструкция по настройке автоматизированной системы записи на водительское удостоверение. Используя мощь Python и интеграцию с сервисами Slack и Anti-Captcha, этот скрипт устраняет неудобства и трудоемкость ручной записи, предоставляя безупречное и эффективное решение. Перед запуском этого скрипта убедитесь, что заменили конфиденциальные данные на заполнители и тщательно протестировали настройку, чтобы подтвердить ее функциональность.

Мы надеемся, что эта исчерпывающая инструкция станет ценным инструментом, помогающим многим людям без проблем записываться на получение водительских удостоверений. Счастливого кодирования!

_Примечание: _Перед запуском скрипта убедитесь, что вы зарегистрировались и настроили необходимые аккаунты в сервисе Anti-Captcha и Slack, а также получили необходимые ключи API и URL-адреса вебхуков.

Спасибо, что вы являетесь частью нашего сообщества! Перед тем, как уйти:

  • Не забудьте поставить лайк и подписаться на автора! 👏
  • Вы можете найти еще больше контента на Odicis** 🚀**
  • Подписывайтесь на нас в LinkedIn**.**