Python запросов Сессия не имеет куки включены - PullRequest
0 голосов
/ 14 января 2020

Я пытаюсь войти через модуль запросов. Я пробовал метод GET и POST, но всегда получаю ответ ниже.

Ошибка. В вашем браузере не включены файлы cookie. Эта страница входа не будет работать без поддержки cook ie.

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

import requests
from bs4 import BeautifulSoup

S = requests.session()
headers = {
    'Content-Type': 'application/xhtml+xml',
    'Access-Control-Allow-Origin': '*',
    'Access-Control-Allow-Methods': 'GET, POST,OPTIONS',
    'Access-Control-Allow-Headers': '*',
    'Access-Control--Max-Age': '86400',
    'User-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36'
}

url = 'https://idp.maxebrd.safemls.net/idp/Authn/UserPassword'
response = S.get(url, headers=headers)
soup = BeautifulSoup(response.content, 'html.parser')
print(soup.prettify())

1 Ответ

1 голос
/ 15 января 2020

Кажется, проблема в поддержке Javascript, глядя на источник при первой записи, мы видим это:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>SafeMLS&reg; Error</title>
<link id="logincss" rel="stylesheet" href="https://cdn.clareitysecurity.net/css/login.css" />
<script src="https://cdn.clareitysecurity.net/js/remember.min.js" type="text/javascript"></script>
</head>
<body>
<script type="text/javascript" src="https://cdn.clareitysecurity.net/sys/maxebrd/googletrack.js"></script>
<!--
LocalAddr: 172.16.17.42
LocalName: clt-web-pt01-a.safemls.net
ServerName: idp.maxebrd.safemls.net
-->
<script type="text/javascript">
if (isCookieEnabled() == false) {
    alert("Error. Your browser does not have cookies enabled. This login page will not function without cookie support.");
    document.location.href = "/idp/nocookies.jsp";
} else {
    document.location.href = "https://maxebrdi.paragonrels.com/";
}
</script>
</body>
</html>

Так как requests не имеет Javascript, мы должны вручную применить любой страница должна загружаться правильно.
Мы видим, что она перенаправляет нас на "https://maxebrdi.paragonrels.com/", что, вероятно, устанавливает правильные файлы cookie для использования на странице входа. К счастью, requests.Session() делает это и перенаправления для нас по умолчанию.

import requests
headers = {
"Accept": "*/*",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; rv:60.0) Gecko/20100101 Firefox/60.0"
}
with requests.Session() as session:
    username = "username"
    password = "password"
    data = {
        "j_username": username,
        "password": password,
        "j_password": password,
        "j_logintype": "sso" #seems to be constant
    }
    #first set cookies
    session.get("https://maxebrdi.paragonrels.com/", headers=headers)
    #then do login
    result = session.post("https://idp.maxebrd.safemls.net/idp/Authn/UserPassword", headers=headers, data=data)
    print(result.text)

Это возвращает сообщение «Пользователь не найден» (поскольку пароль указан неверно).
Я предлагаю вам использовать Javascript отключение расширений, очистить куки-файлы страницы и повторно посетить, чтобы вы могли смотрите веб-страницу точно так же, как requests, также следите за вкладкой «Сеть», чтобы увидеть, какие запросы поступают из вашего браузера, и реплицируйте ее в своем скрипте.

...