Не удается войти с модулем запросов - PullRequest
0 голосов
/ 12 января 2019

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

Мой код выглядит так:

    session_requests = requests.session()
    result = session_requests.get("https://dienynas.tamo.lt/Prisijungimas/Login")
    soup = BeautifulSoup(result.content, 'lxml')
    SToken = soup.find(attrs={"name": "SToken"})['value']
    authenticity_token = soup.find(attrs={"name": "__RequestVerificationToken"})['value']
    payload = {
        "UserName": "<my username>",
        "Password": "<my password>",
        "IsMobileUser": "false",
        "ReturnUrl": "",
        "RequireCaptcha": "false",
        "Timestamp": datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
        "SToken": SToken
    }
    headers = {
        "cookie": "__RequestVerificationToken="+authenticity_token,
        "origin": "https://dienynas.tamo.lt",
        "referer": "https://dienynas.tamo.lt/Prisijungimas/Login",
        "user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"
        }
    result = session_requests.post("https://dienynas.tamo.lt/", params = payload, headers = headers)

И ответы, которые я получаю, такие же, как если бы я только что отправил простой запрос GET на эту страницу. Я потратил много часов на это и до сих пор не могу понять, что не так. Пожалуйста, помогите!

Сайт - https://dienynas.tamo.lt

Похоже, что я отправляю все данные, которые отправляются при входе в мой браузер, но это не работает ...

Кроме того, я не знаю, важна ли эта информация, но до обновления я мог войти только с этими данными формы - UserName, Password, IsMobileUser, ReturnUrl и __RequestVerificationToken ( который теперь отправляется в заголовок cookie по какой-то причине)

1 Ответ

0 голосов
/ 12 января 2019

Оказывается, я тупой. По какой-то причине я использовал свое время для Timestamp, а не просто собирал его вместе с SToken. Тогда они не совпадают, и сервер не входит в систему ... Рабочий код:

    session_requests = requests.session()
    result = session_requests.get("https://dienynas.tamo.lt/Prisijungimas/Login")
    soup = BeautifulSoup(result.content, 'lxml')
    SToken = soup.find(attrs={"name": "SToken"})['value']
    timestamp = soup.find(attrs={"name": "Timestamp"})['value']
    payload = {
        'UserName': '<myUsername>',
        'Password': '<MyPassword>',
        'IsMobileUser': 'false',
        'ReturnUrl': '',
        'RequireCaptcha': 'false',
        'Timestamp': timestamp,
        'SToken': SToken
    }
    r = session_requests.post("https://dienynas.tamo.lt/", data = payload)
...