0

私の大学のウェブサイトにpython requests.session()関数を使ってログインできないようです。ログインに必要なすべてのヘッダーとCookieを取得しようとしましたが、資格情報で正常にログインできませんでした。それはエラーは表示されませんが、私はそれがまだログインされていないことを示しているログイン後に見直しのソースコード。と私は私がcsrfのクッキー情報を使用する必要があると言われたが、私は動的にcsrf私は他の2つのクッキー情報を取得するように取得しようとするとKeyErrorが発生するので、データをクッキーします。助けてください。Pythonがウェブサイトでログインをリクエストしています

すべてのコードは以下のとおりです。私は自分の資格情報でログインとパスワードを記入しますが、残りは正確なコードです。

import requests 

with requests.session() as r: 
    url = "https://www.ouac.on.ca/apply/nonsecondary/intl/en_CA/user/login" 
    page = r.get(url) 
    aspsessionid = r.cookies["ASPSESSIONID"] 
    ouacapply1 = r.cookies["OUACApply1"] 
    LOGIN = "" 
    PASSWORD = "" 
    submit = "Log In" 
    login_data = dict(ASPSESSIONID=aspsessionid, OUACApply1=ouacapply1, login=LOGIN, password=PASSWORD, submitButton=submit) 
    header = {"Referer":"https://www.ouac.on.ca/apply/nonsecondary/intl/en_CA/user/login", "User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0"} 
    logged_in = r.post(url, data=login_data, headers=header) 
    new_page = r.get(url="https://www.ouac.on.ca/apply/nonsecondary/intl/en_CA/profile/") 
    plain_text = new_page.text 
    print(plain_text) 
+0

'requests.Session()を使用すると、ヘッダーとCookieをある要求から別の要求にコピーする必要はありません。 – furas

+0

'csrf'は'

'=のelemenyにすることができ、クッキーには含まれません。 ''はあなたがリクエストで使用する必要がある他の隠しフィールドを持っているかもしれません。 Chrome/FirefoxのDevToolsを使用して、ブラウザからサーバーに送信されるリクエスト(タブのネットワーク)とすべてのリクエストのすべてのパラメータを確認します。 – furas

答えて

0

私はアカウントを持っていないので、私はそれをテストすることはできませんが、このようなことがあります。

import requests 
import bs4 
import webbrowser 

def display(content): 
    # to see this HTML in web browser 
    with open('temp.html', 'wb') as f: 
     f.write(content) 
     webbrowser.open('temp.html') 

with requests.session() as r: 

    LOGIN = "" 
    PASSWORD = "" 

    login_url = "https://www.ouac.on.ca/apply/nonsecondary/intl/en_CA/user/login" 
    profile_url="https://www.ouac.on.ca/apply/nonsecondary/intl/en_CA/profile/" 

    # session need it only once and it will remember it 
    r.headers.update({ 
     "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0" 
    }) 

    # load page with form - to get cookies and `csrf` from HTML 
    response = r.get(login_url) 

    #display(response.content) 

    # get `csrf` from HTML 
    soup = bs4.BeautifulSoup(response.text, 'html.parser') 
    csrf = soup.find('input', {'name': 'csrf'}).attrs['value'] 

    print('csrf:', csrf) 

    # cookies are not part of form so you don't use in form_data, 
    # session will use cookies from previous request so you don't have to copy them 
    form_data = { 
     'login': LOGIN, 
     'password': PASSWORD, 
     'submitButton': "Log In", 
     'csrf': csrf, 
    } 

    # send form data to server 
    response = r.post(login_url, data=form_data) 

    print('status_code:', response.status_code) 
    print('history:', response.history) 
    print('url:', response.url) 

    #display(response.content) 

    response = r.get(profile_url) 

    display(response.content) 
関連する問題