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 サイトにログオンします。しかし、実行すると、ログイン ページのソース コードしか取得できません。これは、要素の検査の下にある [ネットワーク] タブの写真です。

リクエスト ヘッダー/フォーム データ

ここで何が問題なのかわかりません。しばらくの間、これを調べてきました。前もって感謝します!

4

1 に答える 1

2

テストするアカウントはありませんが、現在のアプローチでは複数のことが間違っています:

  • パスワード (pwフィールド) は、次の関数 (ここで定義)を介してハッシュされます。

    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;
    }
    
  • リクエストを行うたびに同じトークン値を持つことはできません。実際のフォームからトークン値を取得する必要があります。つまり、最初に を「GET」しhome.html、トークン値を抽出してから、「POST」リクエストで使用する必要があります。

2 番目の問題については、またはフォーム フィールドの残りの部分を自動的に「自動入力」するようなことを試してみることをお勧めしmechanizeますmechanicalSoup。ただし、この特定のケースで非常に重要な JavaScript を実行することはできません。

これらすべての問題に対処したくない場合は、ブラウザの自動化とseleniumパッケージ化を検討してください。

于 2017-01-02T04:14:17.897 に答える