2011-11-29 22 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 बैकएंड उपयोग कर रहे हैं वास्तव में इन लॉगिन निष्पादित करने के मान। हमें यह जानना होगा कि उस फ़ाइल में सामग्री और प्रक्रिया क्या है, क्योंकि प्रतिक्रिया पाइथन में ठीक है, यह कोल्डफ्यूजन है जो जावास्क्रिप्ट को वापस ले रहा है और इसके बजाय रीडायरेक्ट कर रहा है। यह समस्या सर्वरसाइड है और पायथन क्लाइंट में नहीं है। – DeaconDesperado

+0

मुझे लगता है कि ओपी की वेबसाइट नहीं है, और यह सिर्फ उपयोगकर्ता के रूप में प्रोग्रामेटिक रूप से इसके साथ बातचीत करने की उम्मीद कर रहा है। वेबसाइट पर प्रमाणीकरण करना कोई समस्या नहीं है, आपको लॉग इन करने और उसी डेटा की आपूर्ति करते समय केवल किस डेटा को भेजा जाता है, इस पर एक नज़र डालने की आवश्यकता है। सर्वर-साइड पर क्या चल रहा है यह जानने की कोई ज़रूरत नहीं है। नीचे मेरा उदाहरण देखें। – 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

"आर = session.get ('http://friends.cisv.org/index.cfm?fuseaction=user.fullprofile')" –

+0

"के बाद उपरोक्त समाधान में यह समाधान स्वीकार्य नहीं है जब आपके पास कोई नियंत्रण और क्षमता नहीं है बाहरी पुस्तकालय स्थापित करें। बॉक्स समाधान से बाहर एक देशी पसंद किया जाता है। – KoCMoHaBTa

3

दुर्भाग्यवश शब्द "लॉगिन" दुर्भाग्य से बहुत अस्पष्ट है। यहां दिए गए कोड ने स्पष्ट रूप से HTTP मूल प्रमाणीकरण का उपयोग करके लॉग इन करने का प्रयास किया है। मैं अनुमान लगाता हूं कि यह साइट चाहता है कि आप इसे किसी प्रकार के POST फॉर्म में उपयोगकर्ता नाम और पासवर्ड भेज दें (इस प्रकार अधिकांश वेब-आधारित लॉगिन फॉर्म काम करते हैं)। इस मामले में, आपको उचित POST अनुरोध भेजना होगा, और भविष्य में अनुरोधों के लिए आपको जो भी कुकीज़ भेज दी गई है उसे रखें। दुर्भाग्यवश मुझे नहीं पता कि यह क्या होगा, यह साइट पर निर्भर करता है। आपको यह पता लगाने की आवश्यकता होगी कि यह सामान्य रूप से उपयोगकर्ता को कैसे लॉग करता है और उस पैटर्न का पालन करने का प्रयास करता है।