爬虫游戏第二关

接上一篇文章,我们来到第二关首页,网址:http://www.heibanke.com/lesson/crawler_ex01/
页面长这样

image.png

看起来像是要破解账号密码,没有头绪,F12看看html结构


image.png

可以看到,主要内容就是一个form表单,点击Sources看看源代码,关键代码就是这个表单

<form method="post" action="">
    <input type='hidden' name='csrfmiddlewaretoken' value='VUJcv7BVRdlmCbmxnqUIWDuxSYw4hD4i' />
    <div class="form-group">
        <label>昵称:(随便输入字符)</label>
        <input class="form-control" type="text" name="username"/>
    </div>
    <div class="form-group">
        <label>密码:(30以内的数字,猜对它就能过关)</label>
        <input class="form-control" id="id_password" name="password" type="password" />
    </div>
    <div class="form-group">
        <input class="btn btn-primary" id="id_submit" type="submit" value="提交">
    </div>
</form>

可以看到,action="",说明这个表单是本页面处理,但是又找不到提交按钮对应的点击事件,随便填个数据点击提交按钮看看http请求,可以看到表单以post的方式提交到了本页面,参数如下图所示

点击提交按钮的post请求

界面提示密码错误
image.png

看到这里就很明显了,这是一个接口,地址是 http://www.heibanke.com/lesson/crawler_ex01/,参数有三个,csrfmiddlewaretoken username password,通过页面提示和form表单代码可以得知:

csrfmiddlewaretoken:写死的,值为VUJcv7BVRdlmCbmxnqUIWDuxSYw4hD4i,
username:用户名,随便编一个即可
password:关键参数,本关目的就是让你猜测password的值

清楚了这些就好办了,循环请求接口,每次让password增大1,直到正确为止,代码:

from urllib import request
from urllib import parse
from bs4 import BeautifulSoup

def get_page(url, params):
    print('get url %s' % url)
    data = parse.urlencode(params).encode('utf-8')
    req  = request.Request(url, data)
    page = request.urlopen(req).read()
    page = page.decode('utf-8')
    return page
count = 0
url = "http://www.heibanke.com/lesson/crawler_ex01/"
token = 'VUJcv7BVRdlmCbmxnqUIWDuxSYw4hD4i'
username = 'pkxutao'
password = -1
# 构造post参数
data = {
    'csrfmiddlewaretoken': token,
    'username': 'pkxutao',
    'password': password
}
result = '您输入的密码错误, 请重新输入'
while result == '您输入的密码错误, 请重新输入':
    count += 1
    password += 1
    data['password'] = password
    print('第%d次尝试,参数:%d' % (count, password))
    result = get_page(url, data)
    soup = BeautifulSoup(result, "html.parser")
    # 解析h3元素
    h3 = soup.find_all("h3")[0]
    result = soup.find_all("h3")[0].text
print('成功,username:%s, password:%d' % (username, password))

结果


部分结果截图

在页面验证,用户名随便输一个,密码输入16,结果如图


image.png

搞定收工
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 177,241评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,819评论 4 61
  • 人生旅途漫长,走在现实的路上,心中总要有一个梦,充斥着理想的世界,让我们不放弃;与梦结伴而行,梦里花开花落,而现实...
    美食美客阅读 3,795评论 0 0
  • 一直不太喜欢美人鱼的故事 因为这是一个悲伤的童话故事 美人鱼自从遇见王子以后 生活没有一天是好的 大理的日子是孤独...
    绾绾mg阅读 1,459评论 0 0
  • 我们分离的时间已经超过我们在一起的时间了,越过我们认识的时间了,所有的争吵都已被时间模糊掉了,所有的甜蜜过往也已被...
    肖丝丝阅读 1,373评论 0 0

友情链接更多精彩内容