Задать вопрос
@Romeo558
Продолжающий программист на python.

Почему не получается авторизироваться через requests?

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

Вот что я пробовал:
import requests
from bs4 import BeautifulSoup

# Define the login URL and the user credentials
login_url = "https://edu.tatar.ru/login"
login_payload = {
    "main_login2": "",
    "main_password2": ""
}

# Define the diary URL with a specific date
diary_url = "https://edu.tatar.ru/user/diary/week"

# Create a new session and log in using the user credentials
session = requests.Session()
session.post(login_url, data=login_payload)


# Send a GET request to the diary URL and parse the response using BeautifulSoup
response = session.get(diary_url)
soup = BeautifulSoup(response.content, "lxml")

print(soup)


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

У меня получилось это сделать с помощью Selenium, но время выполнения отбило у меня всё желание. (14 секунд!!!)

from selenium import webdriver
import time
import config

start_time = time.time()  # время начала выполнения

op = webdriver.EdgeOptions()
op.add_argument('--headless')
driver = webdriver.Edge(options=op)
credentials = config.credentials

driver.get("https://edu.tatar.ru/login")
# find username/email field and send the username itself to the input field
driver.find_element("name", "main_login2").send_keys(credentials['login'])
# find password input field and insert password as well
driver.find_element("name", "main_password2").send_keys(credentials['password'])
# click login button
driver.find_element("xpath", "//button[contains(text(),'Войти')]").click()

driver.get("https://edu.tatar.ru/user/diary/week")

html_page = driver.page_source

driver.quit()

print(html_page)

end_time = time.time()  # время окончания выполнения
total_time = end_time - start_time  # время выполнения в секундах
print("Время выполнения:", total_time, "секунд")


Я перепробовал все User-Agent, все варианты заголовков, но ничего не выходит. Можете посмотреть, что я делаю не так в первом случае? Я ни в коем случае не прошу всё сделать за меня - я хочу понять где моя ошибка, поэтому буду признателен, если ответ всё таки найдётся. Спасибо
  • Вопрос задан
  • 85 просмотров
Подписаться 1 Простой Комментировать
Ответ пользователя Vindicar К ответам на вопрос (2)
Vindicar
@Vindicar
RTFM!
Потому что надо исходный код целевой страницы почитать, ну и разобраться, как пользоваться инструментами разработчика в браузере, чтобы понять, какие запросы выполняются.
https://edu.tatar.ru/login - это URL для получения страницы с формой входа. А вот сама форма отправляет данные на URL https://edu.tatar.ru/logon. Именно по этому адресу я бы и делал запрос.
Ответ написан
Комментировать