美文网首页
最基本的验证码练习-手动输入douban

最基本的验证码练习-手动输入douban

作者: 任我笑笑 | 来源:发表于2018-05-27 10:47 被阅读0次

作为昨天的验证码练习,手动输入
模仿的是douban

前期准备

image.png

douban在登录的时候,如果一次成功,则没有什么关系
如果失败,或者多次请求,会出现验证码

image.png

form的url
form的结构

<input id="email" name="form_email" type="text" class="basic-input" maxlength="60" value="xxxxxxxx" tabindex="1">

<input id="password" name="form_password" type="password" class="basic-input" maxlength="20" tabindex="2">

<input type="text" id="captcha_field" name="captcha-solution" tabindex="3" placeholder="验证码">

此外,有2个hidden,意思不明,如果只是3个而不能post请求成功的话,会加入下面这2个

<input name="source" type="hidden" value="index_nav">
<input name="redir" type="hidden" value="https://www.douban.com/">
image.png

验证码的url

至此,前期调查完成

代码

新建项目

新建项目的时候选择anacoda的环境,否则不认


image.png

如果没有这个选项,可以先在file ->default settings中添加

image.png

最终代码

import requests
from lxml import etree

url = "https://accounts.douban.com/login"
header ={"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36"}
import user
data = {
    "form_email":user.email,
    "form_password":user.password
}
r = requests.post(url = url,headers = header, data=data)
captcha = etree.HTML(r.text).xpath("//img[@id='captcha_image']/@src")
# 开始没有加这一项,结果失败,推测跟图片的验证码是一一对应的关系,图片是问题,这个是答案
captchaId  = etree.HTML(r.text).xpath("//input[@name='captcha-id']/@value")
if (len(captcha) > 0 ):
    print(captcha[0])
    with open("1.jpg","wb") as fn :
        fn.write(requests.get(captcha[0]).content)
    captchaCode = input(">>>>")
    # 添加验证码后再次发起请求
    data["captcha-solution"] = captchaCode
    data["captcha-id"]=captchaId
    print(data)
    r = requests.post(url=url, headers=header, data=data)
    print(r.text)
else:
    print(r.text)

scrapy的参考
https://www.jianshu.com/p/1567d45b5588

相关文章

网友评论

      本文标题:最基本的验证码练习-手动输入douban

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