Мне очень жаль беспокоить вас своей проблемой.
Я хочу зайти на сайт со скриптом 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
Я понятия не имею, что я делаю здесь неправильно. А ты почему? Какой частью процесса я пренебрегаю?
Спасибо за ваше время.