2011-11-29 9 views
14

파이썬을 사용하여 page에 로그인하려고합니다.파이썬을 사용하여 웹 사이트에 로그인

나는이 other Stack Overflow post에 설명 된 단계를 사용하여 시도, 다음과 같은 코드를 가지고 :

import urllib, urllib2, cookielib 

username = 'username' 
password = 'password' 

cj = cookielib.CookieJar() 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 
login_data = urllib.urlencode({'username' : username, 'j_password' : password}) 
opener.open('http://friends.cisv.org/index.cfm', login_data) 
resp = opener.open('http://friends.cisv.org/index.cfm?fuseaction=activities.list') 
print resp.read() 

을하지만 그건 나에게 다음과 같은 출력했다 : 내가 잘못 뭐하는 거지

<SCRIPT LANGUAGE="JavaScript"> 
    alert('Sorry. You need to log back in to continue. You will be returned to the home page when you click on OK.'); 
    document.location.href='index.cfm'; 
</SCRIPT> 

를?

+0

처리 스크립트의 .cfm 확장자에서 Coldfusion 백엔드를 사용하여 실제로 이러한 로그인을 처리한다고 가정합니다. 우리는 그 파일에 내용과 절차가 무엇인지 알 필요가 있습니다. 응답이 파이썬으로 들어오고 있기 때문입니다. ColdFusion은 자바 스크립트와 리디렉션을 대신 전달합니다. 이 문제는 서버 측에서 발생하며 파이썬 클라이언트에서는 발생하지 않습니다. – DeaconDesperado

+0

나는 OP가 웹 사이트를 소유하고 있지 않으며 사용자로서 프로그래밍 방식으로 상호 작용하기를 희망한다고 가정합니다. 웹 사이트 인증은 전혀 문제가되지 않습니다. 로그인 할 때 어떤 데이터가 전송되고 동일한 데이터를 제공하는지 살펴 봐야합니다. 서버 측에서 진행중인 작업을 알 필요가 없습니다. 아래 예를 참조하십시오. – Acorn

답변

29

멋진 requests 모듈을 사용하는 것이 좋습니다.

아래 코드는 귀하가 사이트에 로그인하여 세션 기간 동안 쿠키를 유지하도록합니다.

import requests 
import sys 

EMAIL = '' 
PASSWORD = '' 

URL = 'http://friends.cisv.org' 

def main(): 
    # Start a session so we can have persistant cookies 
    session = requests.session(config={'verbose': sys.stderr}) 

    # This is the form data that the page sends when logging in 
    login_data = { 
     'loginemail': EMAIL, 
     'loginpswd': PASSWORD, 
     'submit': 'login', 
    } 

    # Authenticate 
    r = session.post(URL, data=login_data) 

    # Try accessing a page that requires you to be logged in 
    r = session.get('http://friends.cisv.org/index.cfm?fuseaction=user.fullprofile') 

if __name__ == '__main__': 
    main() 
+0

감사합니다. 매력처럼 작동했습니다. – iomartin

+0

위의 솔루션에서 "r = session.get ('http://friends.cisv.org/index.cfm?fuseaction=user.fullprofile')" –

+0

제어 및 능력이없는 경우이 솔루션을 사용할 수 없습니다 외부 라이브러리를 설치하십시오. 네이티브 아웃 오브 더 박스 솔루션이 선호됩니다. – KoCMoHaBTa

3

"로그인"이라는 용어는 불행히도 매우 모호합니다. 여기에 제공된 코드는 분명히 HTTP 기본 인증을 사용하여 로그인하려했습니다. 나는이 사이트가 여러분이 사용자 이름과 암호를 일종의 POST 양식 (대부분의 웹 기반 로그인 양식이 작동하는 방식)으로 보내길 원한다고 추측합니다. 이 경우 적절한 POST 요청을 보내야하며 이후 요청을 위해 보낸 모든 쿠키를 유지해야합니다. 불행히도 나는 이것이 무엇인지 알지 못한다. 사이트에 달려있다. 일반적으로 사용자를 기록하고 그 패턴을 따르는 방법을 찾아야합니다.

관련 문제