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

# 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. HDU-1556-Color the ball (线段树和差分数组两种解法)

    N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的"小飞鸽"牌电动车从气球a开始到气球b依次给每个气球涂一 ...

  2. Java中List,Set和Map详解及其区别和使用场景(转)

    https://www.cnblogs.com/EasonJim/p/7967138.html

  3. 如何更改Linux yum源?

    centos下可以通过yum很方便快捷的安装所需的软件和库,如果yum的源不好,安装速度会非常慢,centos默认官方源似乎都是国外的,所以速度无法保证,我一直使用163的源,感觉速度不错.下面就说说 ...

  4. Bootcamp Win10蓝牙鼠标的问题

    运行services.msc找到Bluetooth support service 把启动类型从手动改为自动 重新连接蓝牙鼠标

  5. Java中的Validated验证

    注意点:在使用@NotBlank时,必须与@Valid配着使用,不然不起作用(出现了很奇怪的现象,我第一次试的时候确实有这情况,但是第二次的时候这情况没了,所以这个说不准) @NotBlank 用在S ...

  6. 开源项目android-uitableview介绍

    在iOS应用中,UITableView应该是使用率最高的视图之一了.iPod.时钟.日历.备忘录.Mail.天气.照片.电话.短信. Safari.App Store.iTunes.Game Cent ...

  7. Guice入门

    参考链接:http://www.cnblogs.com/xd502djj/archive/2012/06/25/2561414.html Google Guice范例解说之使用入门 http://co ...

  8. logback-spring.xml

    <?xml version="1.0" encoding="UTF-8"?><!--该日志将日志级别不同的log信息保存到不同的文件中--&g ...

  9. java构造方法之我见

    java中构造方法是作为除了成员方法之外的一种特殊方法,方法名与类名相同.一般类中如果没有明确定义构造方法时,编译器默认为无参构造方法.当我们调用new方法创建对象就是通过构造方法完成的.因此,当有对 ...

  10. 配置文件无法修改(以修改my-default.ini为例)

    现象: 保存my-default.ini时如果提示“拒绝访问”,右击my-default.ini文件 解决办法: 属性—>安全—>修改权限