여기에서하는 일에 감사드립니다. 일반적으로 Stackoverflow의 도움으로 내 문제를 파악할 수 있지만 이번에는 붙어 있습니다. 바라기를 당신은 저를 도울 수있다!Python 요청에 로그인하지 못했습니다.
질문은 매우 간단합니다 : this webpage에 로그인하는 방법 파이썬의 요청?
내 단계 :
- 은 로그인 URL
- 로그인 세부 정보를 제공하세요. HTML에 따르면 '이메일'과 '비밀번호'를 제공해야합니다. 로그인
불행하게도, 쉬운 방법은이 경우 작동하지 않는 성공하면
details
의 출력은 다음과 같습니다 로그인이 성공하면 <script>
dataLayer = [{
'environment': 'production',
'loggedIn': '0',
'userCode': '',
'rank': '',
'totalBalance': '0',
'overAgeCasino': '0'
}];
</script>
물론, 'loggedIn'
의 '0'
이 '1'
로 변경해야합니다.
예를 들어 'csrftoken'을 추가해야하고 HTML에서 '숨김'유형으로 발견 될 수 있다는 것을 발견했습니다. 그러나 type = 'hidden'부분의 이름은이 부분과 아무 관련이 없으며 아무런 가치도 없습니다 (link to screenshot of HTML). 어딘가 다른 나는 CSFR 토큰도 CookieJar에 저장되어 있음을 읽을 수 있지만 거기되지 않습니다 :
<RequestsCookieJar[<Cookie PHPSESSID=5dib6cf6kpvf29dsn725ljcec7 for .napoleongames.be/>, <Cookie locale=en_GB for .napoleongames.be/>, <Cookie user=false for .napoleongames.be/>]>
나는 열심히에서 해당 로깅이 불가능 믿고 찾을 수 있습니다,하지만 난 아이디어가 부족했습니다 . 누군가 urllib (2)를 사용하여이를 수행하는 방법을 알고 있다면 유용합니다. 내가 부드럽게 실행할 수 없었으므로 셀레늄을 사용하지 않을 것입니다.
코드 :
import requests
from bs4 import BeautifulSoup
from datetime import date
date_str = str(date.today())
login_url = 'https://en-gb.sports.napoleongames.be/user/login'
protected_url = 'proctected_url'
payload = {'email': '[email protected]',
'password': '*********'}
with requests.Session() as session:
session.get(login_url)
login_page = session.post(login_url,
data=payload)
html_body = BeautifulSoup(login_page.content, 'html.parser').find(
name='body', attrs={'id': 'user_login'})
details = html_body.findAll('script')[0]
page = session.get(protected_url)
헤더 : 양식을 제출할 때
{'Date': 'Wed, 06 Sep 2017 23:45:52 GMT', 'Server': 'Apache', 'Expires': 'Thu, 19 Nov 1981 08:52:00 GMT', 'Cache-Control': 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0', 'Pragma': 'no-cache', 'X-Frame-Options': 'SAMEORIGIN', 'X-Cache-Page': 'MISS', 'Set-Cookie': 'locale=en_GB; Expires=Mon, 05-Mar-2018 23:45:52 GMT; Domain=.napoleongames.be; Path=/, user=false; expires=Mon, 05-Mar-2018 23:45:52 GMT; Max-Age=15552000; path=/; domain=.napoleongames.be, loyalty=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; path=/; domain=.napoleongames.be', 'Strict-Transport-Security': 'max-age=15768000', 'Vary': 'Accept-Encoding', 'Content-Encoding': 'gzip', 'Content-Length': '10840', 'Connection': 'close', 'Content-Type': 'text/html'}
불행히도 현대 웹 사이트 프레임 워크의 상당수는 자바 스크립트에 광범위하게 의존합니다. 물론 요청은 처리 할 수 없습니다. 귀하의 작업이 현대 웹 페이지를 정기적으로 다듬어야 할 필요가 있다면 셀렌에 익숙해지기를 강력히 권합니다.이 문제는 쉽게 해결할 수 있습니다. –
@DanielleM. 요청이있는 자바 스크립트가 있습니다. [Link] (https://stackoverflow.com/a/38081914/7073884) –
@DanielleM. 아니, 그냥 재미 있었어.셀렌을 사용할 때 발생하는 오류를 알아 내야합니다. 처음에는 솔루션이 다운 그레이드되는 경로 문제가 있었지만 geckodriver에 문제가 발생하여 권장 솔루션이 업그레이드 된 것이므로 요청에 집중했습니다. – Rob