2014-05-13 28 views
9

Tôi muốn đăng nhập vào trang web này: https://www.fitbit.com/login Đây là mã của tôi, tôi sử dụng:Python: Đăng nhập vào một trang web sử dụng 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 

tôi sử dụng chrome để kiểm tra các yếu tố của hộp đầu vào, tôi đã cố gắng nhiều cặp chìa khóa, nhưng không có cặp nào hoạt động. Bất kỳ ai có thể giúp tôi xem trang web này? Dữ liệu chính xác tôi đưa vào biến acc_pwd của tôi là gì?

Thank you very much

Trả lời

7

Cậu quên các lĩnh vực tiềm ẩn có dạng:

<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> 

vì vậy bạn có thể muốn cập nhật:

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

mà có thể được kiểm tra bởi họ dịch vụ. Mặc dù, với tên của trường disableThirdPartyLogin, tôi tự hỏi nếu không có javascript bẩn ràng buộc với hành động gửi biểu mẫu thực sự thêm một giá trị trước khi thực sự làm POST. Bạn có thể muốn kiểm tra xem các công cụ nhà phát triển và giá trị POST có được phân tích hay không.

Testing trông nó không, mặc dù javascript cho biết thêm một số giá trị, có thể là từ các tập tin cookie:

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

đây là quan điểm của tôi về việc này sử dụng yêu cầu (trong đó có một API tốt hơn so với 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) 

và đừng quên lần đầu tiên vào trang đăng nhập bằng cách điền vào cookie của bạn!

Cuối cùng, tôi không thể trợ giúp thêm cho bạn vì tôi không có tài khoản hợp lệ trên fitbit.com và tôi không cần/muốn một tài khoản. Vì vậy, tôi chỉ có thể truy cập trang lỗi đăng nhập cho các bài kiểm tra của mình.

chỉnh sửa:

để phân tích kết quả, sau đó bạn có thể sử dụng:

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

ví dụ để có được các thông báo lỗi:

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

nguồn:

và cả hai đều trên pypi:

pip install lxml requests 

HTH

+0

Cảm ơn! Nhưng tiếp theo, làm sao tôi có thể sử dụng r? Tôi chưa bao giờ sử dụng thư viện yêu cầu trước đây. – MacSanhe

+0

bạn có thể sử dụng 'r.status_code' để lấy mã trạng thái,' r.cookies' để lấy jar cookie (hoặc bạn có thể sử dụng 'jar'), bạn có thể sử dụng' r.text' và chuyển nó sang 'lxml' hoặc 'BeautifulSoup' để giúp bạn phân tích cú pháp trang kết quả. Có một cái nhìn tại http://python-requests.org để có được bạn thuyết phục như thế nào tuyệt vời mà thư viện là :-) – zmo

+0

Tôi có nghĩa là những gì tôi thường làm là: 1. opener.open (login_url, dữ liệu) 2. thường xuyên urllib2.urlopen .request (balabalabala) Vì vậy, nếu tôi sử dụng yêu cầu để đăng nhập, điều đó có nghĩa là tôi phải sử dụng yêu cầu để rút ra html từ url? Tôi đã thử bước thứ hai bình thường của mình, nó không hoạt động. – MacSanhe

Các vấn đề liên quan