Bezdepbonusu7Программирование: статьи и ответы

Как войти на веб-сайты, требующие OTP, с помощью Python.

Архив Bezdepbonusu74 мин чтения

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

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

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

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

Начиная

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



selenium
Привязки языка Python для Selenium WebDriver. Пакет selenium используется для автоматизации взаимодействия веб-браузера с... pypi.org



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



Загрузки - ChromeDriver - WebDriver для Chrome
WebDriver для Chromechromedriver.chromium.org



На этом давайте начнем копаться в реализации. Начните с импорта 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 из электронной почты

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



Как читать электронные письма в Python - код Python
Абду Рокикз · 7 мин чтения · Обновлено в мае 2020 г. · Стандартная библиотека Python Возможность создать приложение, которое ... www.thepythoncode.com



Для работы нижеприведенного предполагается, что последнее электронное письмо содержит 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, но он прост и работает для меня!

SeleniumProgrammingOtpPython

Похожие материалы

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