为了账号安全,请及时绑定邮箱和手机立即绑定

【Python 爬虫闯关】第二关

标签:
Python

在上次第一关爬虫闯关成功后,我们会得到第二关的地址:http://www.heibanke.com/lesson/crawler_ex01/

分析

打开页面,如图:

猜数字

根据提示,随便输入一个昵称和 30 以内的数字,提交后,提示密码错误:

密码错误

题目意图很明显了,就是猜数字!

下面我们就要分析传入到后台的数据是什么,我们要做的就是:按下 F12

我们在提交数字后,可以看到发我后台的请求数据是:

请求数据

请求数据中包含了 username 和 password,以及 csrfmiddlewaretoken(这个数据本关中没有用到),下面我们就可以代码实现了。

也就是通过代码,将 0~30 之间的数据不断传递到后台,只要返回文本中包含 密码错误 字样就表示没有成功。逻辑比较简单,这里直接上代码了~

requests 实现
# coding=utf-8
import requests

url = 'http://www.heibanke.com/lesson/crawler_ex01/'

playload = {'username': 'liuhaha', 'password': '1'}

for i in range(31):
    playload['password'] = i
    print(u'传入参数为:' + str(playload))

    r = requests.post(url, data=playload)

    if u"成功" in r.text:
        print(u'闯关成功!')
        break

运行结果

使用 selenium 实现

环境:Firefox58,Chrome64。

在刚开始使用 Firefox 调用 WebElementsubmit() 方法后,发现 submit() 方法没有等到页面重新加载完毕就返回,这就导致我们在查找页面元素时无法找到我们想要的东西。而调用提交按钮的 click() 方法就一切正常。

Chrome浏览器需要安装ChromeDriver - WebDriver for Chrome,下载解压后,配置到环境变量中。

# coding=utf-8

from selenium import webdriver

url = 'http://www.heibanke.com/lesson/crawler_ex01/'

# browser = webdriver.Chrome()
browser = webdriver.Firefox()
browser.get(url)

for i in range(31):
    username = browser.find_element_by_name('username')
    username.clear()
    username.send_keys('liuhaha')

    password = browser.find_element_by_id("id_password")
    password.clear()
    password.send_keys(i)
    # FireFox下异步,Chrome下同步,submit方法会等待页面加载完成后返回
    # password.submit()

    # 两种浏览器下click()方法都会等到加载完成后返回
    browser.find_element_by_id('id_submit').click()

    returnText = browser.find_element_by_tag_name('h3')
    print(returnText.text + ', password ' + str(i))
    if u"成功" in returnText.text:
        break
    browser.back()

browser.quit()

运行结果:

运行结果

成功页面:

成功页面

总结

本关主要考察以 POST 方法提交数据的相关操作,还是比较简单的。同样的,成功后会返回下一关的地址,大家不妨先尝试下一关!

点击查看更多内容
5人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消