# 本练习是模拟登陆及验证码处理(把验证码下载到本地后手动输入)

# 1 通过分析页面获得form表单的登陆接口为 action="https://www.douban.com/accounts/login"
# 2 通过抓包发现登陆除了发送账户密码和验证码外,还发送了另一个值:
# form_email: 账户
# form_password: 密码
# captcha-solution: 验证码文本
# captcha-id: 验证码的图片地址动态码 import requests
from lxml import etree def cap(captcha_data):
"""创建一个处理验证码的方法,主要逻辑就是请求验证码的url,然后把验证码图片下载到本地,人工识别后输入"""
with open("captcha.jpg","wb") as f:
f.write(captcha_data) # 手动输入验证码
text = input("输入验证码:")
return text def doubanlogin():
"""先创建一个方法""" login_url = "https://www.douban.com/accounts/login" # 实例化一个session对象,用来保存cookie信息
session = requests.Session() # 创建headers
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"} # 先发送一个get请求,用来获取需要的captcha-id
# 获得html页面信息
html = session.get(login_url,headers=headers).content.decode()
# 使用etree方法把html转化为xpath可解析对象
html_e = etree.HTML(html)
# 通过xpath提取需要的信息,这是一个动态码,每次请求都会构建一个新的值
captcha = html_e.xpath("//div[@class='captcha_block']/input[2]/@value")[0]
# 构建完整的验证码地址
captcha_url = "https://www.douban.com/misc/captcha?id={}&size=s".format(captcha)
# 请求验证码地址获得验证码图片的数据
captcha_data = session.get(captcha_url,headers=headers).content
# 调用函数处理验证码数据
text = cap(captcha_data) # 构建post请求需要的data数据
data = {"form_email": "账号",
"form_password": "密码",
"captcha-solution": text,
"captcha-id": captcha,
"source": "index_nav"
} # 发送post请求,获取登陆成功页面,到这一步就获得了登陆账号的cookie信息
session.post(login_url,headers=headers,data=data) # 获得了cookie,就可以再发送get请求,获取个人主页信息
response = session.get("https://www.douban.com/people/190027418/",headers=headers) with open("people.html","w",encoding="utf-8") as f:
f.write(response.content.decode()) print(response.content.decode()) if __name__ == '__main__':
doubanlogin()

用session模拟登陆,手动输入验证码的更多相关文章

  1. 通过session模拟登陆

    import requests # 这个练习对比的是上一个登陆练习,这个是不用自己传入cookie参数,而是利用session方法登陆 # 实例化一个session session = request ...

  2. 爬虫之 cookie , 验证码,模拟登陆,线程

    需求文档的定制 糗事百科的段子内容和作者(xpath的管道符)名称进行爬取,然后存储到mysql中or文本 http://sc.chinaz.com/jianli/free.html爬取简历模板 HT ...

  3. 使用webdriver+urllib爬取网页数据(模拟登陆,过验证码)

    urilib是python的标准库,当我们使用Python爬取网页数据时,往往用的是urllib模块,通过调用urllib模块的urlopen(url)方法返回网页对象,并使用read()方法获得ur ...

  4. python---cookie模拟登陆和模拟session原理

    cookie模拟登陆: import tornado.web class IndexHandler(tornado.web.RequestHandler): def get(self): #self. ...

  5. 第三百四十三节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy模拟登陆和知乎倒立文字验证码识别

    第三百四十三节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy模拟登陆和知乎倒立文字验证码识别 第一步.首先下载,大神者也的倒立文字验证码识别程序 下载地址:https://gith ...

  6. c# 使用 HttpWebRequest模拟登陆(附带验证码)

    在C#中,可以使用HttpWebRequest进行相关的模拟登陆,登陆后进行相关的操作,比如抓取数据,页面分析,制作相关登陆助手等等. 先说下流程 1.使用httpwebrequest先进入你要登录的 ...

  7. 验证码破解 | Selenium模拟登陆微博

    模拟登陆微博相对来说,并不难.验证码是常规的5个随机数字字母的组合,识别起来也比较容易.主要是用到许多Selenium中的知识,如定位标签.输入信息.点击等.如对Selenium的使用并不熟悉,请先移 ...

  8. 利用selenium库自动执行滑动验证码模拟登陆

    破解流程 #1.输入账号.密码,然后点击登陆 #2.点击按钮,弹出没有缺口的图 #3.针对没有缺口的图片进行截图 #4.点击滑动按钮,弹出有缺口的图 #5.针对有缺口的图片进行截图 #6.对比两张图片 ...

  9. pytho简单爬虫_模拟登陆西电流量查询_实现一键查询自己的校园网流量

    闲来无事,由于校园内网络是限流量的,查询流量很是频繁,于是萌生了写一个本地脚本进行一键查询自己的剩余流量. 整个部分可以分为三个过程进行: 对登陆时http协议进行分析 利用python进行相关的模拟 ...

随机推荐

  1. Codeforces Round #431 (Div. 2) A

    Where do odds begin, and where do they end? Where does hope emerge, and will they ever break? Given ...

  2. net core分块上传文件

    net core分块上传文件   写完asp.net多文件上传(http://www.cnblogs.com/bestckk/p/5987383.html)后,感觉这种上传还是有很多缺陷,于是...( ...

  3. 使用jstack分析解决进程死锁问题

    项目启动后不久就会出现死锁的现象,一直不知道什么原因造成的,后来经过大神的指点,解决了这个问题. 流程如下: 1.环境jdk1.6以上: 2.linux下使用ps aux|grep tomcat 命令 ...

  4. 给Visual Studio更换皮肤和背景图

    1.先安装更换皮肤的插件 VS菜单栏里面找到:工具>扩展和更新>联机>搜索: Theme Editor 下载并安装: 安装后先不着急重启VS 然后,安装可更改背景图片的插件:工具&g ...

  5. MiniDao分页的坑

    //TODO 此处切记不要传(page-1)*rows,MiniDAO底层已经做了此运算,.sql文件中也无需写limit,会自动加上List<BcProjectSampleBackEntity ...

  6. JAVA基础之Map接口

    个人理解: 个人感觉Map接口以后会经常用到,可以很清晰地查找某个对象,要熟悉其四种遍历方法.特别注意其键值对的键不能是重复的,有想定义有序存取的话,可以使用LinkedHashMap集合.不过定义自 ...

  7. 装饰者模式及php实现

    装饰模式(Decorator Pattern) : 动态地给一个对象增加一些额外的职责(Responsibility),就增加对象功能来说,装饰模式比生成子类实现更为灵活.其别名也可以称为包装器(Wr ...

  8. qrcode length overflow (1632>1056)--qrcode.js使用过程中二维码长度溢出解决办法

    近日在开发过程中需要为页面动态生成一个二维码信息,由于这个二维码中包含了很多文字,字母以及符号,测试过程中发现有些二维码会报错,因为二维码内容太多了,没办法显示.后来在GitHub中找到了解决办法. ...

  9. sudo的用法

    为了系统安全我们一般不直接使用root用户进行日常维护,sudo是临时提升root权限,有时执行一些命令或者更新没权限的文件时需要使用root,这个时候就需要sudo上场了 普通用户是没有sudo使用 ...

  10. javaSe-常用的类之Calender

    Calendar是java中常用的类,比data类使用更加方便,更能更加强大,好吧多的不用你说了,直接上代码 import java.util.Calendar;//需要引进的包 public cla ...