Использование python для очистки электронной почты на предмет одноразовых паролей (OTP), необходимых для входа в систему.

Эта статья будет полезна, если вы хотите получить доступ к веб-сайтам, требующим OTP после входа в систему, как на картинке выше.

Некоторые предположения / требования

  1. Gmail используется
  2. OTP можно получить по электронной почте.
  3. Google Chrome как выбор браузера
  4. Python

Начиная

Первым шагом будет доступ к странице входа. Для этого я использовал пакет Selenium для python. Если у вас еще нет селена, вы можете установить его, следуя инструкциям по адресу:



Кроме того, чтобы это работало, вам нужно будет загрузить chromedriver (проверьте свою версию Chrome и загрузите соответствующую):



На этом давайте начнем копаться в реализации. Начните с импорта webdriver из selenium, затем добавьте местоположение вашего chromedriver и URL-адрес страницы входа.

import time
from selenium import webdriver
browser = webdriver.Chrome(
    "filepath of your chrome driver")
browser.get('login page url')

Обычный вход

Следующим шагом будет ввод имени пользователя и пароля для веб-сайта. Я использовал путь .find_element_by_xpath, чтобы найти форму имени пользователя и пароля. Затем с помощью .send_keys введите учетные данные для входа, прежде чем нажимать кнопку входа. Чтобы получить XPath элементов, вы можете щелкнуть правой кнопкой мыши по местоположению элемента, к которому вы хотите получить доступ, и нажать «Проверить» на Chrome. Затем щелкните правой кнопкой мыши код HTML и выберите «Копировать XPath».

username_elem = browser.find_element_by_xpath('xpath of username form')
username_elem.send_keys(username)
password_elem = browser.find_element_by_xpath('xpath of password form')
password_elem.send_keys(password)
login_elem = browser.find_element_by_xpath('xpath of login button')
login_elem.click()

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

Получение OTP из электронной почты

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



Для работы нижеприведенного предполагается, что последнее электронное письмо содержит OTP. Большую часть кода лучше объяснить по ссылке выше. Однако основная модификация, которую вам нужно будет сделать, - это строка 45 и ниже. С содержимым электронного письма в теле переменной в виде строки. Чтобы не усложнять задачу, я использовал метод разделения строк, чтобы найти одноразовый пароль, разделив строку до и после одноразового пароля перед добавлением ее в список. Наконец возвращаем список.

Теперь заполняем одноразовый пароль на сайте…

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

Используя цикл for, мы можем получить доступ к элементам OTP и заполнить их индивидуально, редактируя XPath и отправляя OTP индивидуально. Прежде чем, наконец, нажать кнопку отправки.

# wait for OTP
time.sleep(10)

# get OTP
otp = get_otp()
otp_split = [str(i) for i in str(otp[0])]

# fills in 4 pin OTP code
for i in range(4):
    otp_elem = browser.find_element_by_xpath('//*[@id="loginForm"]/div[1]/div/div[1]/input' + str([i + 1]))
    otp_elem.send_keys(otp_split[i])

otp_login_elem = browser.find_element_by_xpath('XPath of submit button')
otp_login_elem.click()

И это все!

Требуются некоторые настройки Gmail

Одна проблема, с которой вы можете столкнуться, - это доступ к вашей электронной почте. Чтобы это сработало, вам нужно изменить настройку Gmail;

  1. Включите доступ по протоколу IMAP (Gmail ›Настройки› Пересылка и POP / IMAP ›Нажмите« Включить IMAP »)
  2. Включите менее безопасный доступ к приложениям (https://support.google.com/accounts/answer/6010255)

Замечания

Вот и все, надеюсь, это поможет! Работая над личным проектом по очистке некоторых данных с веб-сайта, для которого требуется OTP, я не нашел много статей, посвященных этой теме. Я подумал, что напишу что-нибудь в помощь!

Это моя первая статья на среднем уровне… и я относительно новичок в программировании. Во многом это основано на пробах и ошибках, чтении руководств и многих статей о stackoverflow. Я знаю, что это, возможно, не лучший способ подойти к этому входу OTP, но он прост и работает для меня!