Python: невозможно войти на сайт, используя BeautifulSoup - PullRequest
0 голосов
/ 01 апреля 2020

Мне очень жаль беспокоить вас своей проблемой.
Я хочу зайти на сайт со скриптом python. Я делал это раньше, но система была проще. До сих пор я использовал запросы и BeautifulSoup, чтобы найти элементы для заполнения данных формы.

from bs4 import BeautifulSoup as bs
from requests import Session

headers = {
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
    "Accept-Encoding": "gzip, deflate, br",
    "Accept-Language": "en-US,en;q=0.5",
    "Connection": "keep-alive",
    "Content-Length": "404",
    "Content-Type": "application/x-www-form-urlencoded",
    "Cookie": "Cookie",
    "Host": "www.chrono24.fr",
    "Origin": "https://www.chrono24.fr",
    "Referer": "https://www.chrono24.fr/user/index.htm",
    'TE': 'Trailers',
    "Upgrade-Insecure-Requests": "1",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0"
}


url = "https://www.chrono24.fr/user/index.htm"

login_data = {
    'continueTo': "/user/index.htm",
    'login': '',
    'changeLogInPermanentlyPref': 'true',
    'email': 'myemail',
    'password': 'mypassword',
    'submit': '',
    'logInPermanently': 'on',
    '_sourcePage': "sourcepage",
    '__fp': "fp",
    '__at': "at"

}

def put_cookies(cookies, headers):
    tmp = ""
    tmp = tmp + "__cfduid" + "=" + cookies['__cfduid'] + ";"
    tmp = tmp + " chronosessid" + "=" + cookies['chronosessid'] + ";"
    tmp = tmp + " csrf-token" + "=" + cookies['csrf-token'] + ";"
    tmp = tmp + " c24-data" + "=" + cookies['c24-data'] + ";"
    tmp = tmp +" timezoneOffset=-120; _ga=GA1.2.1620940945.1585572699; _ga_PS820NHZPE=GS1.1.1585599091.4.1.1585599309.0; _gid=GA1.2.1985039581.1585572700; _fbp=fb.1.1585572701045.922022398; _hjid=ab1c81ef-1de9-4725-837e-fde31b183afd; c24-log-in-permanently=false; userHistory=; userAccountActivationReminder=; cfctGroup=; _hjIncludedInSample=1; _dc_gtm_UA-527734-1=1; _gat_UA-527734-1=1"
    headers['Cookie'] = tmp
    return headers



url = "https://www.chrono24.fr/api/watch/collection/item/chart/price.json?itemId=2632807&period=max"
with Session() as s:
    site = s.get("https://www.chrono24.fr/user/index.htm")
    bs_content = bs(site.content, "html.parser")
    sourcepage = bs_content.find("input", {"name": "_sourcePage"})["value"]
    fp = bs_content.find("input", {"name": "__fp"})["value"]
    at = bs_content.find("input", {"name": "__at"})["value"]

    login_data['_sourcePage'] = sourcepage
    login_data['__fp'] = fp
    login_data['__at'] = at

    headers = put_cookies(s.cookies, headers)
    resp = s.post("https://www.chrono24.fr/user/index.htm", data=login_data, headers=headers)
    home_page = s.get("https://www.chrono24.fr/api/watch/collection/item/chart/price.json?itemId=2632807&period=max")
    print(home_page.content)


С этим кодом я всегда получаю:

b'{"errors":[{"details":[{"message":"Your email, your username or your password is invalid. Check your personal data.","type":"Default.Unauthorized"}],"field":"global","messages":["Your email, your username or your password is invalid. Check your personal data."]}]}'

Вот данные формы при входе в систему вручную: данные формы
Я думал, что проблема была в заголовках, но даже если создать те же заголовки, что и в моем браузере: header_login
Тогда я подумал, что это cook ie но на странице входа в систему установлено только два куки. Однако в форме запроса есть много других: cookies_request

Я понятия не имею, что я делаю здесь неправильно. А ты почему? Какой частью процесса я пренебрегаю?
Спасибо за ваше время.

...