2017-09-06 9 views
5

여기에서하는 일에 감사드립니다. 일반적으로 Stackoverflow의 도움으로 내 문제를 파악할 수 있지만 이번에는 붙어 있습니다. 바라기를 당신은 저를 도울 수있다!Python 요청에 로그인하지 못했습니다.

질문은 매우 간단합니다 : this webpage에 로그인하는 방법 파이썬의 요청?

내 단계 :

  1. 은 로그인 URL
  2. 로그인 세부 정보를 제공하세요. HTML에 따르면 '이메일'과 '비밀번호'를 제공해야합니다. 로그인

불행하게도, 쉬운 방법은이 경우 작동하지 않는 성공하면

  • 확인 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'} 
    
  • +1

    불행히도 현대 웹 사이트 프레임 워크의 상당수는 자바 스크립트에 광범위하게 의존합니다. 물론 요청은 처리 할 수 ​​없습니다. 귀하의 작업이 현대 웹 페이지를 정기적으로 다듬어야 할 필요가 있다면 셀렌에 익숙해지기를 강력히 권합니다.이 문제는 쉽게 해결할 수 있습니다. –

    +0

    @DanielleM. 요청이있는 자바 스크립트가 있습니다. [Link] (https://stackoverflow.com/a/38081914/7073884) –

    +0

    @DanielleM. 아니, 그냥 재미 있었어.셀렌을 사용할 때 발생하는 오류를 알아 내야합니다. 처음에는 솔루션이 다운 그레이드되는 경로 문제가 있었지만 geckodriver에 문제가 발생하여 권장 솔루션이 업그레이드 된 것이므로 요청에 집중했습니다. – Rob

    답변

    3

    , 당신은 당신이 작성해야뿐만 아니라 필드 양식 태그 내부에 고려 다른 분야에서해야 쪽으로. 이 경우 페이지 소스 내부를 볼 때 로그인 할 때 채워지는 필드가 하나 더 있습니다.

    payload = {'email': '[email protected]', 
          'password': '*********' 
          'buttons_app_service_user_login[buttonClicked]': 'buttons_app_service_user_login-save'} 
    

    는 다른 문제가 발생하는 경우 나 그 일을 알고 나 보자

    당신은 당신의 페이로드에 고 덧붙였다 시도 할 수 있습니다.

    +0

    성공, 많은 감사합니다! 따라서 핵심은 '값'대신 빈칸 인 'id'를 사용하는 것입니다 (비어 있음). – Rob

    +0

    예 처음로드시 값이 비어 있습니다. 비어있는 사용자 이름과 비밀번호로 로그인 양식을 제출하려고하면 값이 비어 있습니다. 값이 채워집니다. – chad