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

# 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. replcation set (复制集)配置过程 --mongodb

    一,配置规划 复制集原理(基本构成是1主2从的结构,自带互相监控投票机制(Raft(MongoDB)  Paxos(mysql MGR 用的是变种))如果发生主库宕机,复制集内部会进行投票选举,选择一 ...

  2. Exception in thread "main" java.lang.UnsupportedClassVersionError: com/google/common/base/Function : Unsupported major.minor version 52.0的解决办法(图文详解)

    不多说,直接上干货! 问题详情 Exception in thread "main" java.lang.UnsupportedClassVersionError: com/goo ...

  3. C# 加密、解密函数

    #region ========加密======== /// <summary> /// 加密 /// </summary> /// <param name=" ...

  4. 现阶段github上的emysql编译无法通过的问题

    最近在写db引擎,今天用到了emysql,找到https://github.com/Eonblast/Emysql,拽下来,然后发现竟然编译不通过~~去网上找了下资料,在 http://erlang. ...

  5. Spring Aspect 获取请求参数

    切片(Aspect)也就是Spring AOP 实现Aspect的主要步骤: 1.在哪里切入 .在哪个方法起作用 .什么时候起作用 2.起作用的时候执行什么处理逻辑 下面是代码实现 /** * 切片A ...

  6. 记录:swift学习笔记1-2

    swift还在不断的更新做细微的调整,都说早起的鸟儿有虫吃,那么我们早点出发吧,趁着国内绝大多数的coder们还没有开始大范围普遍应用. 网上有些大神说:swift很简单!我不同意这个观点,假如你用h ...

  7. 关于学习Lisp的一点思考

    以前读<黑客与画家>,其中对Lisp语言的赞美和推崇,让我燃起学习Lisp语言的强烈冲动,但很快发现在实际工作中应用的场景很少,出于功利心最终放弃了.直到上周未在家里读完了<大教堂与 ...

  8. Python3+Selenium3+webdriver学习笔记5(模拟常用键盘和鼠标事件)

    #!/usr/bin/env python# -*- coding:utf-8 -*- from selenium import webdriverfrom selenium.webdriver.co ...

  9. 使用Java connector消费ABAP系统的函数

    Java Connector(JCO)环境的搭建:Step by step to download and configure JCO in your laptop 我的ABAP系统有个函数名叫ZDI ...

  10. UITableView设计思想 考察

    整体使用了build模式:单是组织结构混乱:不符合人类思维. UITableViewDataSource:描述了View的要素个数情况:并担负了builder功能. UITableViewDelega ...