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

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

前期准备

image.png

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

image.png

form的url
form的结构






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



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)