Python ввести логин пароль

Пишем форму авторизации на Python Tkinter

В данной статье мы рассмотрим с Вами как можно быстро создать графическое приложение с использованием библиотеки Python Tkinter. Проектировать мы будем экран авторизации, в который пользователь должен ввести свой логин и пароль. Версия Python, которая используется в коде 3.8. Код с комментариями представлен ниже.

# импортируем библиотеку tkinter всю сразу
from tkinter import *
from tkinter import messagebox

# главное окно приложения
window = Tk()
# заголовок окна
window.title(‘Авторизация’)
# размер окна
window.geometry(‘450×230’)
# можно ли изменять размер окна — нет
window.resizable(False, False)

# кортежи и словари, содержащие настройки шрифтов и отступов
font_header = (‘Arial’, 15)
font_entry = (‘Arial’, 12)
label_font = (‘Arial’, 11)
base_padding =
header_padding =

# обработчик нажатия на клавишу ‘Войти’
def clicked():

# получаем имя пользователя и пароль
username = username_entry.get()
password = password_entry.get()

# выводим в диалоговое окно введенные пользователем данные
messagebox.showinfo(‘Заголовок’, ‘, ‘.format(username=username, password=password))

# заголовок формы: настроены шрифт (font), отцентрирован (justify), добавлены отступы для заголовка
# для всех остальных виджетов настройки делаются также
main_label = Label(window, text=’Авторизация’, font=font_header, justify=CENTER, **header_padding)
# помещаем виджет в окно по принципу один виджет под другим
main_label.pack()

# метка для поля ввода имени
username_label = Label(window, text=’Имя пользователя’, font=label_font , **base_padding)
username_label.pack()

# поле ввода имени
username_entry = Entry(window, bg=’#fff’, fg=’#444′, font=font_entry)
username_entry.pack()

# метка для поля ввода пароля
password_label = Label(window, text=’Пароль’, font=label_font , **base_padding)
password_label.pack()

# поле ввода пароля
password_entry = Entry(window, bg=’#fff’, fg=’#444′, font=font_entry)
password_entry.pack()

# кнопка отправки формы
send_btn = Button(window, text=’Войти’, command=clicked)
send_btn.pack(**base_padding)

# запускаем главный цикл окна
window.mainloop()

Теперь проясню пару моментов в коде:

1) в коде используется вот такая конструкция **header_padding — это операция разложения словаря в составляющие переменные. В нашем примере преобразование будет выглядеть следующим образом: **header_padding = -> header_padding -> padx=10, pady=12. Т.е. в конструктор класса Label, например, фактически будут передаваться правильные параметры. Это сделано для удобства, чтобы несколько раз не писать одни и теже настройки отступов. 2) у виджетов (Label, Button, Entry) — есть несколько менеджеров расположения, которые определяют, как дочерний виджет будет располагаться в родительском окне (контейнере). В примере, был использован метод pack(), который, по умолчанию, располагает виджет один под другим.

Таким образом, мы создали кроссплатформенное графическое приложение на Python — авторизация пользователя, которое может пригодиться на практике, остается добавить логику авторизации в методе clicked.

А для тех кто интересуется языком Python — я записал видеокурс Программированию на Python с Нуля до Гуру, в 5-ом разделе которого Создание программ с GUI подробно описывается все компоненты, необходимые для создания Python приложения c графическим интерфейсом.

Создано 23.02.2021 10:48:35

  • Михаил Русаков
  • Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

    Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
    Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

    Если Вы не хотите пропустить новые материалы на сайте,
    то Вы можете подписаться на обновления: Подписаться на обновления

    Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

    Порекомендуйте эту статью друзьям:

    Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

    1. Кнопка:
      Она выглядит вот так:
    2. Текстовая ссылка:
      Она выглядит вот так: Как создать свой сайт
    3. BB-код ссылки для форумов (например, можете поставить её в подписи):

    Комментарии ( 0 ):

    Для добавления комментариев надо войти в систему.
    Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

    Copyright © 2010-2023 Русаков Михаил Юрьевич. Все права защищены.

    Источник

    Python requests. Авторизация на сайте

    Иногда при парсинге страниц нужно получить данные , которые недоступны незарегистрированным пользователям. Для этого нужно авторизоваться на сайте. И в этой статье я покажу как с помощью замечательной библиотеки requests это реализовать.

    В качестве примера попробуем залогиниться на сайте hh.ru.

    Python авторизация

    Как видим нам нужно ввести Email или Телефонный номер в качестве ЛОГИНА и ПАРОЛЬ и нажать кнопку Войти в личный кабинет.

    Установка библиотеки Requests

    Указываем User-Agent

    Казалось бы , нам нужно просто реализовать метод post этой библиотеки , передав все необходимые данные. Но не так просто , так как нам нужно указать правильный User-Agent и вытащить из кукис файлов значение _xsrf.

    User-agent ? И что за значение _xsrf ? Что ты несешь , чувак? Наверно, такие вопросы у вас возникли читая предыдущие строки.Попробую объяснить о чем речь

    Попытаемся просто сделать GET запрос на сайт hh.ru и посмотреть какой ответ он возвращает.

    Python авторизация

    Как мы видим сервер нам возвращает ОТВЕТ 404 , который говорит , что нет такой страницы. Но если мы выполним запрос через браузер , то все нормально.

    Такая ошибка происходит из-за того , что сервер думает , что мы робот , так по умолчанию User-Agent отправляемого запроса равен python-requests/2.22.0. Чтобы сервер нам возвращал нормальный ответ , нужно указать правильный User-Agent, который эмулирует действия пользователя.

     import requests headers = < 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36' >r = requests.get("https://hh.ru", headers=headers) print(r) 

    Объект Session

    Теперь разберемся для чего нужен _xsrf . Когда мы логинимся на сайте hh.ru , то мы просто вводим логин и пароль и все. Но при этом при POST запросе на сервер кроме введенных нами значений передается и параметр _xsrf, который нужен для защиты от CSRF-атак. Так вот значение этого параметра сервер hh.ru генерирует автоматически и хранит его в кукис файлах в браузере и чтобы получить это значение , нам нужно использовать объект Session библиотеки requests.

    Объект Session позволяет сохранять определенные параметры в запросах.Он также сохраняет файлы COOKIE во всех запросах.

    Здесь я привожу полный текст скрипта с подробными комментариями, который осуществляет авторизаицю на сайте hh.ru.

     import requests url = 'https://moscow.hh.ru/account/login' # Важно. По умолчанию requests отправляет вот такой # заголовок 'User-Agent': 'python-requests/2.22.0 , а это приводит к тому , что Nginx # отправляет 404 ответ. Поэтому нам нужно сообщить серверу, что запрос идет от браузера user_agent_val = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36' # Создаем сессию и указываем ему наш user-agent session = requests.Session() r = session.get(url, headers = < 'User-Agent': user_agent_val >) # Указываем referer. Иногда , если не указать , то приводит к ошибкам. session.headers.update() #Хотя , мы ранее указывали наш user-agent и запрос удачно прошел и вернул # нам нужный ответ, но user-agent изменился на тот , который был # по умолчанию. И поэтому мы обновляем его. session.headers.update() # Получаем значение _xsrf из cookies _xsrf = session.cookies.get('_xsrf', domain=".hh.ru") # Осуществляем вход с помощью метода POST с указанием необходимых данных post_request = session.post(url, < 'backUrl': 'https://moscow.hh.ru/', 'username': 'yourlogin', 'password': 'yourpassword', '_xsrf':_xsrf, 'remember':'yes', >) #Вход успешно воспроизведен и мы сохраняем страницу в html файл with open("hh_success.html","w",encoding="utf-8") as f: f.write(post_request.text) 

    Заключение

    В этой статье реализована практическая задача , которая осуществляет авторизацию на сайте hh.ru. Эта задача прекрасна иллюстрирует то , с чем мы можем столкнуться на практике

    Обновлено(1 декабря 2020 года)

    Когда писалась данная статья , то капчи(CAPTCHA) не было на сайте hh.ru и авторизация происходила успешно. Для обхода капчи нужны более сложные решения. А для авторизации на страницах , где нет капчи можно использовать вышеописанный метод. Также у меня есть статья , где рассмотрена авторизация на сайте вконтакте с помощью логина и пароля , c использованием библиотеки vk_api

    Источник

    Авторизация на сайте через питон

    Я описал как парсить сайты через модуль requests. Бывают случаи когда для части сайта нужна авторизация, то есть логин и пароль.

    Для авторизации нужно поддерживать активную сессию в модуле requests, через session.get()

    import requests import re from bs4 import BeautifulSoup import pandas as pd url = 'https://freelance.ru/login/' # Важно. По умолчанию requests отправляет вот такой # заголовок 'User-Agent': 'python-requests/2.22.0 , а это приводит к тому , что Nginx # отправляет 404 ответ. Поэтому нам нужно сообщить серверу, что запрос идет от браузера user_agent_val = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36' # Создаем сессию и указываем ему наш user-agent session = requests.Session() r = session.get(url, headers = < 'User-Agent': user_agent_val >) # Указываем referer. Иногда , если не указать , то приводит к ошибкам. session.headers.update()

    В оригинальной статье было снимание куков, я не совсем понимаю когда использовать. В данном скрипе, я это не использую.

    _xsrf = session.cookies.get('_xsrf', domain=".freelance.ru")

    Дальше посылаем post-запрос

    login = "xxxx" passwd = "xxxx" post_request = session.post(url, < 'login': login , 'passwd': passwd, "check_ip": "on", "submit": "%C2%F5%EE%E4", "auth": "auth", "return_url": "/login/" >)

    Для того чтобы узнать пост запрос, нужно зайти в инспектор кода, вкладка сеть, и найти запрос который посылается

    Теперь переходим в закрытый раздел, обновляем сессию и снимаем данные

    url = "https://freelance.ru/setup/" r = session.get(url) soup = BeautifulSoup(r.text, "lxml") soup

    Дальше можно снимать нужную информацию, используя BeautifulSoup

    Для библиотеки Requests, есть хорошие статьи от Александра, pythonru

    Продвинутое руководство по библиотеке Python Requests — дополнительная информация, по объектам session, сертификатам SSL, прокси.

    Источник

    Читайте также:  Python load json from url
    Оцените статью