第三关,先登录,再猜密码,这关难度较第二关大幅增加,要先去注册一个登录账号,然后打开F12,多登录几次,观察headers数据的变化

给出代码,里面注释很详细

import urllib.request as ur
import urllib.parse as up
import http.cookiejar as hc
import re
#网站打开时会先生成一个cookies,里面只有csrfmiddlewaretoken值,需要把这个cookies保存下来,
#在登录的时候需要验证用到,还需要提取csrfmiddlewaretoken的值,在POST提交表单的时候
#需要提交三个数据,用户名、密码和该值,等验证登录通过以后,服务器会更新cookies,里面
#有两个值sessionid和csrfmiddlewaretoken,需要重新提取csrfmiddlewaretoken的值,因为已经
#发生变化了,然后再重新保存cookies到本地,后面的操作会一直用到这两项数据
url='http://www.heibanke.com/accounts/login/?next=/lesson/crawler_ex02/'
cookie=hc.MozillaCookieJar()
handler=ur.HTTPCookieProcessor(cookie)
opener=ur.build_opener(handler)
req=ur.Request(url)
res=opener.open(req)
#保存第一次cookies到本地
cookie.save('cookie.txt',ignore_discard=True, ignore_expires=True)
#提取csrfmiddlewaretoken值
for i in cookie:
token=i.value
value={'csrfmiddlewaretoken':token,'username':'fangjun','password':'19870716'}
data=up.urlencode(value).encode('utf-8')
headers={
"User-Agent":'Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.3 (KHTML, like Gecko) Version/8.0 Mobile/12A4345d Safari/600.1.4',
"referer":'http://www.heibanke.com/accounts/login/?next=/lesson/crawler_ex02/'
}
#加载cookies登录网站
cookie.load('cookie.txt',ignore_discard=True,ignore_expires=True)
handler=ur.HTTPCookieProcessor(cookie)
opener=ur.build_opener(handler)
#提交表单数据,这里的headers非必须项,仅作示例
req=ur.Request(url,data,headers)
res=opener.open(req)
#登录成功,重新保存cookies到本地
cookie.save('cookie.txt',ignore_discard=True, ignore_expires=True)
#测试密码开始
url='http://www.heibanke.com/lesson/crawler_ex02/'
#加载cookies
cookie.load('cookie.txt',ignore_discard=True,ignore_expires=True)
cookievalue=[]
for i in cookie:
cookievalue.append(i.value)
#重新提取csrfmiddlewaretoken的值
token=cookievalue[0]
handler=ur.HTTPCookieProcessor(cookie)
opener=ur.build_opener(handler)
pat=re.compile(r'<h3>您输入的密码错误, 请重新输入</h3>')
for i in range(30):
#还是需要提交三个数据
data={'username':'xxx','password':i,'csrfmiddlewaretoken':token}
data=up.urlencode(data).encode('utf-8')
req=ur.Request(url,data)
res=opener.open(req).read().decode('utf-8')
if pat.search(res):
print("it's wrong",i)
else:
print('right,the password is',i)
break

  

python3 黑板客爬虫闯关游戏(三)的更多相关文章

  1. python3 黑板客爬虫闯关游戏(一)

    这是学习python爬虫练习很好的网站,强烈推荐! 地址http://www.heibanke.com/lesson/crawler_ex00/ 第一关猜数字 很简单,直接给出代码 import ur ...

  2. python3 黑板客爬虫闯关游戏(四)

    这关较第三关难度增加许多,主要多了并发编程 密码一共有100位,分布在13页,每页打开的时间在15秒左右,所以理所当然的想到要用并发,但是后来发现同IP访问间隔时间不能小于8秒,不然会返回404,所以 ...

  3. python3 黑板客爬虫闯关游戏(二)

    第二关猜登录密码,需要用到urllib.request和urllib.parse 也很简单,给代码 import urllib.request as ur import urllib.parse as ...

  4. Python:黑板课爬虫闯关第一关

    近日发现了[黑板课爬虫闯关]这个神奇的网页,练手爬虫非常的合适 地址:http://www.heibanke.com/lesson/crawler_ex00/ 第一关非常的简单 get 请求网址,在响 ...

  5. Python:黑板课爬虫闯关第五关

    第五关是最后一关了,至此之后黑板课就没有更新过关卡了. 第五关地址:http://www.heibanke.com/lesson/crawler_ex04/ 可以看到,是在第三关的基础上加了验证码. ...

  6. Python:黑板课爬虫闯关第四关

    第四关地址:http://www.heibanke.com/lesson/crawler_ex03/ 一开始看到的时候有点蒙,不知道啥意思,说密码需要找出来但也没说怎么找啊. 别急,随便输了个昵称和密 ...

  7. Python:黑板课爬虫闯关第三关

    第三关开始才算是进入正题了. 输入网址 http://www.heibanke.com/lesson/crawler_ex02/,直接跳转到了 http://www.heibanke.com/acco ...

  8. Python:黑板课爬虫闯关第二关

    第二关依然是非常的简单 地址:http://www.heibanke.com/lesson/crawler_ex01/ 随便输入昵称呢密码,点击提交,显示如下: 这样看来就很简单了,枚举密码循环 po ...

  9. <爬虫>黑板爬虫闯关02

    import requests from lxml import etree ''' 黑板爬虫闯关02 网址:http://www.heibanke.com/lesson/crawler_ex01/ ...

随机推荐

  1. HTTPf服务器(3)

    功能完整的HTTP服务器 导语 这个一个功能完备的HTTP服务器.它可以提供一个完整的文档输,包括图像,applet,HTML文件,文本文件.它与SingleFileHttpServer非常相似,只不 ...

  2. svn自动update到指定目录

    对于开发和测试环境来说,可以使用svn自动update 到指定目录,这样就省去每次提交代码都要去服务器上手动update.对于团队来说,省时省力. 看下怎么做吧,在服务器svnserver安装 目录下 ...

  3. JavaScript简单对象的定义方法

    工厂模式: 初级开发者可能会这样定义对象: var obj = new Object(); obj.name = "hero"; obj.showName=function (){ ...

  4. adb devices 偵測不到 手機

    現象: system 有偵測到 mobile phone, xxx@xxx-ThinkPad-T460p:~/.android$ lsusb Bus Device : ID 1d6b: Linux F ...

  5. Android基础总结(十一)

    Fragment(重要) 用途:在一个Activity里切换界面,切换界面时只切换Fragment里面的内容 生命周期方法跟Activity一致,可以理解把其为就是一个Activity fragmen ...

  6. Banner中利用Jquery隐藏显示下方DIV块

    实现方式1: <!DOCTYPE html><html><head>    <meta charset="UTF-8">    &l ...

  7. Winform 后台将指定的控件集合添加到制定容器中

    /// <summary> /// 把按钮按照行数分割排列 /// </summary> /// <param name="ControlArry"& ...

  8. 隐藏NavigationBar的正确方式

    -(void)viewWillAppear:(BOOL)animated { [self.navigationController setNavigationBarHidden:YES animate ...

  9. easyUI和bootstrap的混搭

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  10. linux 下第一个Libevent代码学习

    #include <event.h> struct event ev; struct timeval tv; void time_cb(int fd, short event, void* ...