2011-11-29 18 views
14

私はこのpageにPythonを使ってログインしようとしています。pythonを使ってウェブサイトにログイン

私はこの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バックエンドを使用していると仮定します。私たちはそのファイルの内容と手順が何であるかを知る必要があります。応答がPythonに入ってきて、ColdFusionがjavascriptとリダイレクトを返すからです。この問題はserversideであり、pythonクライアントではありません。 – DeaconDesperado

+0

私はOPがウェブサイトを所有しておらず、プログラムとしてユーザーとして対話したいと考えています。ウェブサイトへの認証はまったく問題ありません。ログインするときにどのようなフォームデータが送信され、同じデータが供給されるかを調べるだけで済みます。サーバー側で何が起こっているのかを知る必要はありません。下の私の例を見てください。 – Acorn

答えて

29

素晴らしいrequestsモジュールの使用をお勧めします。

以下のコードは、あなたがサイトにログインし、セッションの期間中Cookieを保持します。

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形式で送ることを望んでいると推測しています(ほとんどのWebベースのログインフォームの仕組みです)。この場合、適切なPOST要求を送信し、将来の要求のために送信したCookieをすべて保持する必要があります。残念ながら、私はこれが何であるか分からず、サイトに依存します。どのようにしてユーザをログに記録し、そのパターンに従うのかを理解する必要があります。

関連する問題