Python:使用urllib登录网站

Python:使用urllib登录网站,python,urllib2,urllib,Python,Urllib2,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(urll

我想登录此网站: 这是我使用的代码:

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中显示的正确数据是什么


非常感谢

您忘记了表单的隐藏字段:

<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>
这可能会被他们的服务检查。尽管如此,考虑到字段名
disableThirdPartyLogin
,我想知道是否没有绑定到表单提交操作的脏javascript在实际执行POST之前实际添加值。您可能希望使用开发人员工具和分析的POST值来检查这一点

尽管javascript添加了一些值(可能来自cookies),但测试结果似乎并非如此:

__fp    w686jv_O1ZZztQ7FkK21Ry2MI7JbqWTf
_sourcePage tJvTQfA5dkvGrJMFkFsv6XbX0f6OV1Ndj1zeGcz7OKzA3gkNXMXGnj27D-H9WXS-
disableThirdPartyLogin  false
email   foo@example.org
includeWorkflow 
login   Log In
password    aeou
redirect    
下面是我对使用请求(它的API比urllib;-)实现这一点的看法

别忘了先用get进入登录页面,把你的cookies罐填进去

最后,我无法进一步帮助您,因为我在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.']
资源:

  • lxml:
  • 要求:
他们都在pypi上:

pip install lxml requests

HTH

您将很难只使用urllib

您可能需要使用批准的方法


这将需要oauth令牌。。。这需要打开网页并让用户登录

谢谢!但是接下来,我如何利用r?我以前从未使用过请求库。您可以使用
r.status\u code
获取状态代码,
r.cookies
获取cookie jar(或者您可以使用
jar
),您可以使用
r.text
并将其传递到
lxml
beautifulsou
来帮助您解析生成的页面。看看,让你确信这个图书馆有多棒:-)我的意思是我通常做的是:1。打开(登录地址,数据)2。经常使用urlib2.urlopen.request(balabala),所以如果我使用request登录,这是否意味着我必须使用request从url中提取html?我尝试了常规的第二步,但不起作用。@zmo是否需要指定所有“loginForm”参数?我这样问是因为,例如在易趣上,一个简单的电子邮件+密码登录表单有十几个参数——除了电子邮件/通行证,所有参数都是隐藏参数。为什么它们不能只接收默认值?谢谢它可能是需要的,也可能不是,这取决于站点的实现。唯一可以肯定的是,不管有没有试过,自己看看它是如何运作的。您可能希望设置所有有意义的值,而不是依赖默认值,因为默认值可能会更改,并且确定性对于您的实现来说总是更安全的
>>> p.xpath('//ul[@class="errorList"]/li/text()')
['Lutilisateur nexiste pas ou le mot de passe est incorrect.']
pip install lxml requests