0

我似乎無法登錄到我的大學網站使用python requests.session()函數。我嘗試檢索所有需要登錄的標題和cookie,但未成功使用我的憑據登錄。它沒有顯示任何錯誤,但是我應該在登錄後檢查的源代碼顯示它仍然沒有登錄。我被告知我需要使用csrf cookie信息,但我似乎無法動態檢索csrf cookie數據,因爲它會在我嘗試檢索時引發KeyError,就像我檢索其他2個Cookie信息一樣。請幫助別人。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()'''''''''''''''''''''''''''''''''''''''' – furas

+0

'csrf'可以在'

'=中選擇,不在Cookie中。 ''可能有其他隱藏字段,您必須在請求中使用。在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)