-1

我正在使用 Python 2.7.5 尝试登录网站。我需要登录该站点,然后导航到其他几个页面以从中提取表格。不过,就目前而言,我的问题在于简单地登录到该站点。登录页面如下所示:

<form action="/session" class="text" method="post"><div style="margin:0;padding:0;display:inline"><input name="authenticity_token" type="hidden" value="xeSbOkcWd444xhHyLj82wLS62qfH72De+7lwIhWFRd4=" /></div>    <p>
    <label for="login">Username</label><br />
    <input id="login" name="login" type="text" /><br />
    <label for="password">Password</label><br/>
    <input id="password" name="password" type="password" />
    <a href="/forgot_password">(Forgotten your password?)</a>
</p>

<p>
    <input id="remember_me" name="remember_me" type="checkbox" value="1" />
    <label class="shiftedlabel" for="remember_me">Remember me</label>
</p>

<p>
    <br /><input name="commit" type="submit" value="Log in" />
</p>
</form>

我一直在以下代码中使用 cookiejar、urllib 和 urllib2,这些代码是从上一个问题中得到的,我在下面稍作修改:

import urllib, urllib2, cookielib

username = 'namehere'
password = 'passwordhere'

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
login_data = urllib.urlencode({'Username' : username, 'password' : password, 'Remember_me' : "1", 'commit' : 'Log in'})
opener.open('http://example.org/login.php', login_data)
resp = opener.open('http://example.org/password_protected_page')
print resp.read()

我在原始的“登录数据”中添加了两个字段,记住我并提交。

当我运行这段代码时,我得到了密码页面的打印输出,但它有错误,我必须登录才能看到这个页面,并且看不到我需要的表格。请注意,网站上此页面不存在 .php 扩展名,但我不知道这有多大不同。

在相关的说明中,我为这类事情找到的另一个最常见的解决方案是使用 mechanize 模块。然而,我无法安装它用来安装自身的“简易安装程序”工具,而且由于我对此很陌生,所以我无法诊断出问题。这是一个单独的问题。

谢谢你的帮助 :)

4

1 回答 1

2

我建议查看程序Charles。它非常适合查找发送到服务器的数据,之后使用 urllib 模拟相同的请求通常非常简单。

在您的情况下,您似乎没有将authentity_token 的值添加到您的POST,名称“记住我”实际上是“remember_me”,名称“用户名”实际上是“登录”。

于 2013-06-19T23:49:00.703 回答