我使用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,这是我从this previous question获得的,我在下面稍作修改:
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()
我在原始&#34;登录数据&#34;中添加了两个字段,记住我并提交。
当我运行此代码时,我得到了传递页面的打印输出,但它有错误,我必须登录才能看到此页面,并且无法看到我需要的表格。请注意,网站上的此页面不存在.php扩展名,但我不知道会产生多大的差异。
在相关的说明中,我发现这种类型的事情的另一个最常见的解决方案是使用机械化模块。但是我无法安装&#34;简易安装程序&#34;它用来安装自己的工具,因为我对此很新,所以我无法诊断问题。这是一个单独的问题。
感谢您的帮助:)
答案 0 :(得分:2)
我建议查看该计划Charles。它非常适合查找发送到服务器的数据,之后使用urllib模拟相同的请求通常非常简单。
在你的情况下,看起来你没有在你的POST中添加authenticity_token的值,名称“Remember me”实际上是“remember_me”,名称“Username”实际上是“login”。