我想登录此网站:https://www.fitbit.com/login 这是我使用的代码:
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
我使用chrome来检查输入框的元素,我尝试了很多密钥对,但没有一个工作。任何人都可以帮我看看这个网站?我在变量acc_pwd中显示的正确数据是什么?
非常感谢
答案 0 :(得分:8)
您忘记了表单的隐藏字段:
<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
的名称,我想知道是否没有绑定到表单的提交操作的脏javascript,实际上在实际执行POST之前添加了一个值。您可能希望通过分析开发人员工具和POST值来检查它。
看起来没有的测试,虽然javascript添加了一些值,可能来自cookie:
__fp w686jv_O1ZZztQ7FkK21Ry2MI7JbqWTf
_sourcePage tJvTQfA5dkvGrJMFkFsv6XbX0f6OV1Ndj1zeGcz7OKzA3gkNXMXGnj27D-H9WXS-
disableThirdPartyLogin false
email foo@example.org
includeWorkflow
login Log In
password aeou
redirect
这是我使用请求执行此操作(具有比urllib更好的API ;-))
>>> 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)
并且不要忘记首先使用get来填充你的cookie罐来登录页面!
最后,我无法帮助你,因为我在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
答案 1 :(得分:1)
你将很难用urllib
您可能需要使用已批准的方法https://wiki.fitbit.com/display/API/Fitbit+API;jsessionid=7D918DE258862E80575153385C02507D
这将需要一个oauth令牌......这将需要打开一个网页并让用户登录