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

# 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. Jenkins权威指南

    https://jenkins.io/doc/   ---官网 https://www.cnblogs.com/leefreeman/p/4226978.html

  2. net core 2.0 web api + Identity Server 4 + angular 5

    net core 2.0 web api + Identity Server 4 + angular 5前台使用angular 5, 后台是asp.net core 2.0 web api + ide ...

  3. NET Core应用可以同时运行在Windows Container和Linux Container-1

    NET Core多平台开发体验[1]: Windows 微软在千禧年推出 .NET战略,并在两年后推出第一个版本的.NET Framework和IDE(Visual Studio.NET 2002,后 ...

  4. 056 Merge Intervals 合并区间

    给出一个区间的集合, 请合并所有重叠的区间.示例:给出 [1,3],[2,6],[8,10],[15,18],返回 [1,6],[8,10],[15,18].详见:https://leetcode.c ...

  5. 对jvm虚拟机 内存溢出的思考

    java内存溢出:当新产生对象时,新生代空间不够,导致无法申请到足够的空间,报内存溢出 内存泄漏:一些静态集合,静态常量没有被gc清理,越来越多,占用内存,最后导致无法申请到新的空间

  6. java join 方法的使用

    在很多情况下,主线程创建并启动子线程,如果子线程中要进行大量的耗时运算,主线程往往将早于子线程结束之前结束.这时,如果主线程想等待子线程执行完成之后再结束,比如子线程处理一个数据,主线程要取得这个数据 ...

  7. 09SpringAopAdvice

    Spring原生的经典模式 实现 AOP 通知: 前置通知:在目标方法执行之前执行,不能改变方法的执行流程和结果! 实现 MethodBeforeAdvice接口! 后置通知:在目标方法执行之后执行, ...

  8. easyUI filebox限定文件大小

    转载自:https://www.2cto.com/kf/201701/574667.html 侵删  easyui1.5filebox控件中增加文件大小的验证规则 2017-01-07 09:22:0 ...

  9. Android 使用RecyclerView实现多行水平分页的GridView效果和ViewPager效果

    前些天看到有人在论坛上问这种效果怎么实现,没写过也没用过这个功能,网上查了一下,大多是使用ViewPager+GridView或者HorizontalScrollView+GridView实现,不过貌 ...

  10. escape,encodeURI,encodeURIComponent 之间的区别和使用

    escape(目前已经被淘汰)是对字符串(string)进行编码(而另外两种是对URL),不会对下列字符编码 ASCII字母  数字  @*/+ 最关键的是,当你需要对URL编码时,请忘记这个方法,这 ...