2017-09-06 74 views
5

oturum açmada başarısız oluyor Burada yaptığınız şeyleri takdir ediyorum. Genellikle Stackoverflow'un yardımıyla sorunlarımı çözebiliyorum, ama bu sefer sıkışıp kaldım. Umarım bana yardım edebilirsin!Python istekleri

Soru şudur: this webpage oturum açmak için nasıl Python isteklerini?

Benim adımlar:

  1. giriş url
  2. giriş bilgilerini verin alın. HTML'ye göre, bir 'e-posta' ve 'şifre' sağlamanız gerekiyor. Oturum

Maalesef kolay yaklaşım bu durumda çalışmak için görünmüyor başarılı olup olmadığını

  • Kontrol HTML giriş için bir oturum ve kullanım yayını oluşturun. Örneğin, details çıktısı: Oturum başarılı olup olmadığını

    <script> 
        dataLayer = [{ 
         'environment': 'production', 
         'loggedIn': '0', 
         'userCode': '', 
         'rank': '', 
         'totalBalance': '0', 
         'overAgeCasino': '0' 
        }]; 
    </script> 
    

    Açıkçası, 'loggedIn' ait '0''1' olarak değişmelidir.

    Bir örnekte, bir 'csrftoken' eklemeniz gerekebileceğini ve bunun HTML'de 'gizli' bir tür olarak bulunabileceğini buldum. Ancak, type = 'hidden' kısmındaki adın bununla hiçbir ilgisi yok gibi görünüyor ve ayrıca hiçbir değeri yok (link to screenshot of HTML). Başka bir yerde ben bir CSFR belirteci de cookiejar depolandığını okumak, ama orada değildir:

    <RequestsCookieJar[<Cookie PHPSESSID=5dib6cf6kpvf29dsn725ljcec7 for .napoleongames.be/>, <Cookie locale=en_GB for .napoleongames.be/>, <Cookie user=false for .napoleongames.be/>]> 
    

    bana zor bu günlüğü mümkün değildir inanmak buluyorum ama fikirlerimiz tükendi ettik . Birisi urllib (2) ile nasıl yapılacağını bilirse, aynı zamanda yararlıdır. Selenium'u hiç kullanamadığım için kullanmamayı tercih ederim.

    Kodu:

    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) 
    

    Başlıkları: Bir formu göndermek

    {'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

    Maalesef, bazı modern web sitesi çerçeveleri, elbette taleplerin işleyemediği javascript'e dayanıyor. Eğer işiniz modern web sayfalarını düzenli olarak kazımanızı gerektiriyorsa, selenuma alışmanızı tavsiye ederim, bu mükemmel ve bu tür sorunları kolayca çözmenizi sağlar. –

    +0

    @DanielleM. İstekleri ile javascript etrafında yollar vardır. [Bağlantı] (https://stackoverflow.com/a/38081914/7073884) –

    +0

    @DanielleM. Hayır, sadece eğlence içindi.Selenium kullandığımda ortaya çıkan hataları anlamalıyım. İlk önce çözümün downgrade olduğu bir yol sorunu var, ama sonra geckodriver ile bir şeyler ters gitti ve sonra önerilen çözüm yükseltmek oldu, bu yüzden – Rob

    cevap

    3

    , size doldurmanız gerekmez, sadece alanlar formu etiketleri içinde dikkate diğer alanlardaki almalı yukarı. Bu durumda, sayfa kaynağının içine baktığınızda, giriş yaptıktan sonra doldurulacak bir alan daha vardır.

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

    diğer sorunlarla karşılaşmanız durumunda bana o çalıştı olmadığını bilmek ya edelim:

    Sen yükü içinde olduğunu eklemeyi deneyebilirsiniz.

    +0

    isteklerine odaklanmış başarılı, çok teşekkürler! Bu yüzden anahtar 'değer' yerine 'değer' kullanmaktı (boştu) – Rob

    +0

    Evet, boş kullanıcı adı ve şifre ile giriş formunu göndermeye çalıştığınızda, ilk yükte değer boş. değeri doldurulur. – chad