0

python requests.session() 함수를 사용하여 대학 웹 사이트에 로그인 할 수없는 것 같습니다. 로그인에 필요한 모든 헤더와 쿠키를 가져 오려고했지만 내 자격 증명으로 로그인하지 못했습니다. 그것은 어떤 오류를 표시하지 않지만 내가 로그인 한 것으로 간주되고 이후에 검토 된 소스 코드는 아직 로그인되어 있지 않다는 것을 보여줍니다. 그리고 나는 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()을 사용하면 한 요청에서 다른 요청으로 헤더와 쿠키를 복사 할 필요가 없습니다. – 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)