Python 爬虫闯关(第二关)

作者: hoxis | 来源:发表于2018-07-16 09:05 被阅读13次

    在上次第一关爬虫闯关成功后,我们会得到第二关的地址: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 方法提交数据的相关操作,还是比较简单的。同样的,成功后会返回下一关的地址,大家不妨先尝试下一关!


    如果觉得有用,欢迎关注我的微信,一起学习,共同进步,不定期推出赠书活动~

    你的关注是对我最大的鼓励!你的关注是对我最大的鼓励!

    相关文章

      网友评论

      • coder_it:感觉有点意思刚刚试了一下:smile:

      本文标题:Python 爬虫闯关(第二关)

      本文链接:https://www.haomeiwen.com/subject/xqevpftx.html