2014-05-13 5 views
9

मैं इस वेबसाइट में प्रवेश करें करना चाहते हैं एक वेबसाइट में प्रवेश करेंपायथन: <a href="https://www.fitbit.com/login">https://www.fitbit.com/login</a> यह मेरा कोड मैं का उपयोग करें: urllib का उपयोग कर

import urllib2 
import urllib 
import cookielib 

login_url = 'https://www.fitbit.com/login' 
acc_pwd = {'login':'Log In','email':'username','password':'pwd'} 
cj = cookielib.CookieJar() ## add cookies 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 
opener.addheaders = [('User-agent','Mozilla/5.0 \ 
        (compatible; MSIE 6.0; Windows NT 5.1)')] 
data = urllib.urlencode(acc_pwd) 
try: 
    opener.open(login_url,data,10) 
    print 'log in - success!' 
except: 
    print 'log in - times out!', login_url 

मैं क्रोम का उपयोग इनपुट बॉक्स के तत्व का निरीक्षण करने, मैंने कोशिश की कई महत्वपूर्ण जोड़े, लेकिन कोई काम नहीं करता है। कोई भी मुझे इस वेबसाइट पर देखने में मदद कर सकता है? मेरे परिवर्तनीय acc_pwd में जो सही डेटा दिखाया गया है, वह क्या है?

आपको बहुत बहुत

उत्तर

7

आप प्रपत्र की छिपी क्षेत्रों भूल रहे हैं धन्यवाद:

<form id="loginForm" class="validate-enabled failure form" method="post" action="https://www.fitbit.com/login" name="login"> 
    <input type="hidden" value="Log In" name="login"> 
    <input type="hidden" value="" name="includeWorkflow"> 
    <input id="loginRedirect" type="hidden" value="" name="redirect"> 
    <input id="disableThirdPartyLogin" type="hidden" value="false" name="disableThirdPartyLogin"> 
    <input class="field email" type="text" tabindex="23" name="email" placeholder="E-mail"> 
    <input class="field password" type="password" tabindex="24" name="password" placeholder="Mot de passe"> 
</form> 

ताकि आप अद्यतन करना चाहते हो सकता है:

acc_pwd = {'login':'Log In', 
      'email':'username', 
      'password':'pwd', 
      'disableThirdPartyLogin':'false', 
      'loginRedirect':'', 
      'includeWorkflow':'', 
      'login':'Log In' 
      } 

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

परीक्षण है कि लग रहा है, हालांकि जावास्क्रिप्ट कुछ मान, जो कुकीज़ से हो सकता है कहते हैं ऐसा नहीं होता,:

__fp w686jv_O1ZZztQ7FkK21Ry2MI7JbqWTf 
_sourcePage tJvTQfA5dkvGrJMFkFsv6XbX0f6OV1Ndj1zeGcz7OKzA3gkNXMXGnj27D-H9WXS- 
disableThirdPartyLogin false 
email [email protected] 
includeWorkflow 
login Log In 
password aeou 
redirect  

यहाँ इस अनुरोध का उपयोग कर रही पर मेरी ले (जो urllib तुलना में एक बेहतर एपीआई है है ;-))

>>> import requests 
>>> import cookielib 
>>> jar = cookielib.CookieJar() 
>>> login_url = 'https://www.fitbit.com/login' 
>>> acc_pwd = {'login':'Log In', 
...   'email':'username', 
...   'password':'pwd', 
...   'disableThirdPartyLogin':'false', 
...   'loginRedirect':'', 
...   'includeWorkflow':'', 
...   'login':'Log In' 
...   } 
>>> r = requests.get(login_url, cookies=jar) 
>>> r = requests.post(login_url, cookies=jar, data=acc_pwd) 

और अपनी कुकीज़ जार भरने के लिए पहले लॉग इन पेज पर जाने के लिए मत भूलना!

अंत में, मैं आपकी मदद नहीं कर सकता, क्योंकि मेरे पास fitbit.com पर एक वैध खाता नहीं है और मुझे इसकी आवश्यकता नहीं है। इसलिए मैं केवल अपने परीक्षणों के लिए लॉगिन विफलता पृष्ठ पर जा सकता हूं।

संपादित करें:

उत्पादन पार्स करने के लिए है, तो आप उपयोग कर सकते हैं:

>>> from lxml import etree 
>>> p = etree.HTML(r.text) 

उदाहरण के लिए त्रुटि संदेश प्राप्त करने के लिए:

>>> p.xpath('//ul[@class="errorList"]/li/text()') 
['Lutilisateur nexiste pas ou le mot de passe est incorrect.'] 

संसाधन:

और वे दोनों pypi पर:

pip install lxml requests 

HTH

+0

धन्यवाद! लेकिन अगले के लिए, मैं आर का उपयोग कैसे कर सकता हूं? मैंने पहले कभी अनुरोध पुस्तकालय का उपयोग नहीं किया है। – MacSanhe

+0

आप कुकी जार (या आप 'jar' का उपयोग कर सकते हैं) प्राप्त करने के लिए स्टेटस कोड,' r.cookies' प्राप्त करने के लिए 'r.status_code' का उपयोग कर सकते हैं, आप 'r.text' का उपयोग कर सकते हैं और इसे' lxml' या परिणामी पृष्ठ को पार्स करने में आपकी सहायता के लिए 'सुंदर सूप'। Http://python-requests.org पर एक नज़र डालें, यह सुनिश्चित करने के लिए कि लाइब्रेरी कितनी महान है :-) – zmo

+0

मेरा मतलब है कि मैं आमतौर पर क्या करता हूं: 1. opener.open (login_url, डेटा) 2. नियमित रूप से urllib2.urlopen .request (balabalabala) तो अगर मैं लॉगिन करने के लिए अनुरोध का उपयोग करता हूं, तो क्या इसका मतलब है कि मुझे यूआरएल से एचटीएमएल खींचने के लिए अनुरोध का उपयोग करना है? मैंने अपने नियमित दूसरे चरण की कोशिश की, यह काम नहीं करता है। – MacSanhe

1

तुम सिर्फ urllib

के साथ एक कठिन समय आप की संभावना की आवश्यकता होगी करने के लिए जा रहे हैं स्वीकृत विधियों का उपयोग करें https://wiki.fitbit.com/display/API/Fitbit+API;jsessionid=7D918DE258862E80575153385C02507D

जो एक ओथ टोकन की आवश्यकता होगी ...जिसके लिए एक वेबपेज खोलने और उपयोगकर्ता लॉगिन होने की आवश्यकता होगी

संबंधित मुद्दे