您忘记了表单的隐藏字段:
<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之前,是否有脏JavaScript捆绑到表单的提交动作中,实际上添加了一个值。您可能需要使用开发人员工具和分析POST值来检查它。
测试看起来好像没有,但JavaScript添加了一些值,可能是从cookie中获取的:
__fp w686jv_O1ZZztQ7FkK21Ry2MI7JbqWTf
_sourcePage tJvTQfA5dkvGrJMFkFsv6XbX0f6OV1Ndj1zeGcz7OKzA3gkNXMXGnj27D-H9WXS-
disableThirdPartyLogin false
email foo@example.org
includeWorkflow
login Log In
password aeou
redirect
以下是我使用 requests(比 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方法进入登录页面,以填充您的cookies jar!
最后,我无法再为您提供帮助,因为我在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
r.status_code
获取状态码,使用r.cookies
获取 cookie jar(或者你可以使用jar
),你可以使用r.text
并将其传递给lxml
或BeautifulSoup
来帮助解析结果页面。请访问 http://python-requests.org 了解这个库有多棒 :-) - zmo