2017-01-02 8 views
1
def get_Auth(): 

    USERNAME = User.get("1.0", END) 
    PASSWORD = Pass.get("1.0", END) 
    print(USERNAME) 
    print(PASSWORD) 

    url = 'https://ps.lphs.net/public/home.html' 

    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.92 Safari/537.36 Vivaldi/1.6.689.34'} 

    g = requests.get(url) 

    soup = BeautifulSoup(g.content) 

    'Find The Values' 

    PSTOKEN = None 
    CONTEXTDATA = None 

    for input in soup.find_all('input')[0:1]: 
     PSTOKEN = input.get('value') 

     print(PSTOKEN) 

    for input in soup.find_all('input')[1:2]: 
     CONTEXTDATA = input.get('value') 

     print(CONTEXTDATA) 


    payload = { 
       'pstoken': PSTOKEN, 
       'contextData': CONTEXTDATA, 
       'dbpw': '', 
       'translator_username': '', 
       'translator_password': '', 
       'translator_ldappassword': '', 
       'returnUrl': 'https://ps.lphs.net/guardian/home.html', 
       'serviceName': 'PS Parent Portal', 
       'serviceTicket': '', 
       'pcasServerUrl': '\ /', 
       'credentialType': 'User Id and Password Credential', 
       'account': USERNAME, 
       'pw': PASSWORD, 
       'translatorpw': '' 
       } 

    r = requests.post(soup, data=payload) 
    print(r) 

私はPowerSchoolにログオンし、ログインに必要なページからグレードを削っています。私はビデオの後にビデオを見ていて、なぜそれがうまくいかないのか理解できません。私は自分のユーザー名とパスワードを要求するTkinterウィンドウを持っていて、それを使ってそのWebサイトにログオンします。しかし、私が実行すると、ログインページのソースコードが得られます。以下は、inspect要素の下にあるNetworkタブの画像です。PowerschoolにPythonリクエストを使用してログイン

Request Headers/Form Data

私は今しばらくの間、このに見てきた、ここで間違っているかわからないんだけど。 ありがとうございます!私がテストにアカウントを持っていないが、複数の物事はあなたの現在のアプローチで間違っている

+0

ウェブページはあなたが考えるより複雑です。まず、 'post()'は 'pstoken'、' contexDat'、 'account'、' pw'の中で異なる値を必要とするかもしれません。ログインフォームで 'get()'をして、HTMLで正しい値を見つけなければなりません。 2番目:サーバはクッキーのような他の要素をチェックするかもしれません( 'requests.Session()')やヘッダ(主に 'User-Agent')を使うのが良いでしょう。 – furas

+0

とJavaScriptを使用して、フォームを制御するためにいくつかのデータをハッシュ/計算することができます。 'pw'フィールドにハッシュされたパスワードを送ることができます。 – furas

答えて

2

  • パスワード(pwフィールド)は、以下の機能(hereを定義)を介してハッシュ化されています

    function doPCASLogin(form) 
    { 
        var originalpw = form.pw.value; 
        var b64pw = b64_md5(originalpw); 
        var hmac_md5pw = hex_hmac_md5(pskey, b64pw) 
        form.pw.value = hmac_md5pw; 
        form.dbpw.value = hex_hmac_md5(pskey, originalpw.toLowerCase()) 
        if (form.ldappassword!=null) { 
        // LDAP is enabled, so send the clear-text password 
        // Customers should have SSL enabled if they are using LDAP 
        form.ldappassword.value = originalpw; // Send the unmangled password 
        } 
    
        // Translator Login 
        var translatorpw = form.translatorpw.value; 
        var i = translatorpw.indexOf(";"); 
        if (i < 0) { 
         form.translator_username.value = translatorpw; 
         form.translator_password.value = ""; 
        } 
        else { 
         form.translator_username.value = translatorpw.substring(0,i); 
         translatorpw = translatorpw.substring(i+1); // Get the password 
         translatorpw2 = translatorpw; 
         translatorpw = b64_md5(translatorpw);     // Added in move to pcas 
         form.translator_password.value = hex_hmac_md5(pskey, translatorpw); 
         if (form.translator_ldappassword!=null) { 
          // LDAP is enabled, so send the clear-text password 
          // Customers should have SSL enabled if they are using LDAP 
          form.translator_ldappassword.value = translatorpw2; // Send the pw for LDAP 
         } 
        } 
    
        return true; 
    } 
    
  • あなたは同じトークン値あなたが要求を行うたびにすることはできません。実際のフォームからトークン値を取得する必要があります。つまり、最初にhome.htmlを "取得"し、トークン値を抽出してから "POST"リクエストで使用する必要があります。第二の問題については

、あなたは自動的にフォームフィールドの残りの「自動移入」だろうmechanizeまたはmechanicalSoupのようなものをしようとする場合があります。ただし、JavaScriptを実行することはできませんが、この場合は非常に重要です。

あなたはすべてのこれらの問題に対処する回避したい場合は、ブラウザの自動化とselenium packageに見えます。

+0

返答いただき、ありがとうございました。コードの一部を修正するのに時間がかかり、pstokenとcontextdataを抽出することができました。私は探していました、そして、私はpstokenとcontextdataがそれぞれの投稿を変えた唯一の価値であることに気付きました。だから私はそれらを入手し、それらを価値観に入れ、ペイロードに使用しました。私はまだハッシュされたpwの最初の問題を理解しなければなりません。しかし、私はこれが正しい方法であるのか、そして正しい方向にあるのかを知りたがっていました。更新されたコードは上記のとおりです。 – Sam

関連する問題