验证码处理+cookie模拟登录
一、背景
相关博文:https://www.jianshu.com/p/9fce799edf1e
https://blog.csdn.net/h19910518/article/details/79348051
Cookie
HTTP协议它是无状态的,就是说这一次请求和上一次请求是没有任何关系的,没有关联的。这种无状态的的好处是快速。但是有时我们希望几个请求的页面要有关联,比如:在a已经登录,在b也希望是登陆状态,但是,这是2个不同的页面,也就是2个不同的HTTP请求,这2个HTTP请求是无状态的,也就是无关联的,所以无法单纯的在b中读取到它在a中已经登陆了,使用数据库可以记录登录状态,但会给服务器造成压力。
Cookie指某些网站为了辨别用户身份,进行Session跟踪而存储在用户本地终端上的数据。当你浏览某网站时,网站存储在你机器上的一个小文本文件,它记录了你的用户ID,密码、浏览过的网页、停留的时间等信息,当你再次来到该网站时,cookie随每个请求发送到同一服务器,服务器通过读取Cookie,得知你的相关信息,就可以做出相应的动作。
Session
Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session对象存储特定用户会话所需的属性及配置信息
1.客户端发送一个 带有Set-Cookie 属性的请求;
2.这个请求需要由服务端用session加密算法进行加密,得到一个session_id 和 cookie 的对应字典
3.下次客户端登录时,浏览器会发送带有Cookie头部的请求的时候,用户就可以不用登陆了。
存储在Session对象的变量不会丢失,而是在整个Session中一直存在下去。当用户请求来自应用程序的web页时,如果该用户还没有Session,则Web服务器会自动创建一个Session对象。而当Session过期或被放弃的时候,服务器会终止该Session。
二、准备
1.手动登录人人网
- 查看验证码类型
- 使用fiddler抓取数据(请求的url、cookie数据)
2.云打码平台使用
- 注册账号(用户和开发者)
- 查看开发文档
- 下载DLL
三、主要步骤
- 使用requests的get方法,获取验证码图片,保存至本地
- 将本地的验证码图片上传至云打码进行识别
- 将识别结果与其他数据(账号、密码等,通过fiddler抓取)进行封装到data参数中
- 实例化一个Session对象,使用post方法,提交url和data参数,实现登录。
代码
import http.client, mimetypes, urllib, json, time, requests
from lxml import etree
from YDMHTTPDemo3.x import YDMHttp #将下载的DLL导入
#给云打码定义一个函数
def getVCode( username, password,filename,codeType):
appid = 'xxxx'
appkey = '3b753c7c24fba02dexxxxxxxxxxxxxxx'
filename = filename
codeType = codeType
timeout = 30
if (username == 'username'):
print('请设置好相关参数再测试')
else:
yundama = YDMHttp(username, password, appid, appkey) #实现云打码用户登录
uid = yundama.login();
print('uid: %s' % uid)
balance = yundama.balance();
print('balance: %s' % balance)
cid, result = yundama.decode(filename, codetype, timeout); #验证码图片上传,返回结果
print('cid: %s, result: %s' % (cid, result))
target1_url = "http://www.renren.com/"
headers = headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36',
}
response = requests.get(url = target1_url,headers = headers)
ht = response.text
tree = etree.HTML(ht)
img= tree.xpath('//img[@verifyPic_login]/@src')
#data中的参数通过手动登录时,使用fiddler抓取。
data = {
'captcha_type':'web_login',
'domain':'renren.com',
'email':'xxxxxxxx@xxx.com', #邮箱
'f':'',
'icode':"", #验证码
'key_id':'1',
'origURL':'http://www.renren.com/home',
'password':'06735438342bxxxxxxxxxxxxxxxxxxxxxxxxx', #加密后的密码
'rkey':'8a339012c2e46e9xxxxxxxxxxxxxxxxxx',
}
target2_url = 'http://www.renren.com/ajaxLogin/login?1=1&uniqueTimestamp=2019841747473'
if img: #如果有验证码
urllib.request.urlretrieve(img[0],'./getimage.jpg')
VCode = getVCode( 'Sroxi', 'xxx', './getimage.jpg', '1006')
print(VCode)
data['icode'] = VCode
session = requests.Session()
session.post(url=target2_url,data = data,headers = headers)
target3_url = 'http://www.renren.com/58xxxxxx'
response1 = session.get(url = target3_url,headers = headers)
htmlfile = response1.text
with open('renren.html','w',encoding = 'utf8') as f:
f.write(htmlfile)
print('finish')
验证码处理+cookie模拟登录的更多相关文章
- PHP cURL 使用cookie 模拟登录
cURL是什么 cURL: http://php.net/manual/zh/book.curl.php PHP 支持 Daniel Stenberg 创建的 libcurl 库,能够连接通讯各种服务 ...
- Java通过httpclient获取cookie模拟登录
package Step1; import org.apache.commons.httpclient.Cookie; import org.apache.commons.httpclient.Htt ...
- Python3之利用Cookie模拟登录
Python3之利用Cookie模拟登录 利用Cookie模拟登录步骤: 1. 在浏览器输入http://demo.bxcker.com,输入用户名和密码登录. 2.登录成功点" ...
- PHP获取Cookie模拟登录CURL
要提取google搜索的部分数据,发现google对于软件抓取它的数据屏蔽的厉害,以前伪造下 USER-AGENT 就可以抓数据,但是现在却不行了.利用抓包数据发现,Google 判断了 cookie ...
- PHP获取Cookie模拟登录
关键字:CURL Cookie CURLOPT_COOKIEJAR CURLOPT_COOKIEFILE 模拟登录 PHP作者:方倍工作室原文:http://www.cnblogs.com/txw19 ...
- PHP获取Cookie模拟登录CURL(转)
要提取google搜索的部分数据,发现google对于软件抓取它的数据屏蔽的厉害,以前伪造下 USER-AGENT 就可以抓数据,但是现在却不行了.利用抓包数据发现,Google 判断了 cookie ...
- Python手动构造Cookie模拟登录后获取网站页面内容
最近有个好友让我帮忙爬取个小说,这个小说是前三十章直接可读,后面章节需要充值VIP可见.所以就需要利用VIP账户登录后,构造Cookie,再用Python的获取每章节的url,得到内容后再使用 PyQ ...
- 黄聪:C#带cookie模拟登录百度
#region 同步通过POST方式发送数据 /// <summary> /// 通过POST方式发送数据 /// </summary> /// <param name= ...
- 验证码破解 | Selenium模拟登录简书
使用超级鹰打码平台处理登录的文字点击验证码 import time from io import BytesIO from PIL import Image from selenium import ...
随机推荐
- codeforces#1257 F. Make Them Similar ( 经典中间相遇问题 )
题目链接: http://codeforces.com/contest/1257/problem/F 题意: 给出$n$个30位整数 找到一个数,让它与这$n$个数分别异或,得到的$n$个数二进制1的 ...
- codeforces#1120C. Compress String(dp+后缀自动机)
题目链接: https://codeforces.com/contest/1120/problem/C 题意: 从前往后压缩一段字符串 有两种操作: 1.对于单个字符,压缩它花费$a$ 2.对于末尾一 ...
- zabbix (6) 为主机添加监控项,触发器,动作
先了解一下zabbix的相关概念 监控项(iterms):一个具体的指标,比如某个人的体重. 键(key):通过定义(自定义或者zabbix自带)的key获取相应指标的具体值,比如这个人的体重50斤 ...
- 知乎面试【五轮技术+HR】
今年下半年去知乎面试了两次,讲道理来说,知乎有CD期, 一旦上一次面试没有通过.在一段时间内,不能再次面试知乎.后来在同事的内推下,再次获得面试机会,哈哈~~,这次面试时间还是挺长的,特记录一下. 7 ...
- linux pthread_cond_signal
pthread_cond_signal函数的作用是发送一个信号给另外一个正在处于阻塞等待状态的线程,使其脱离阻塞状态,继续执行.如果没有线程处在阻塞等待状态,pthread_cond_signal ...
- windows下搭建基于nginx的rtmp服务器
https://blog.csdn.net/fireroll/article/details/51985688 Windows机器配置:Windows7旗舰版 64位Intel(R) Core(TM) ...
- 淘宝npm镜像安装失败的问题
一:背景 心血来潮要简单搞一搞前端运行.打包的东西.结果第一步通过npm安装淘宝npm的时候就出问题了,如图: 二:解决方法 图片显示有点垃圾,但是看出来“Missing write access t ...
- Greenwich.SR2版本的Spring Cloud Config+BUS实例
Spring Cloud Config统一的配置中心同注册中心Eureka一样,也分服务端和客户端.服务端用来保存配置信息,客户端用来读取.它的优势是基于Git仓库,支持多环境.多分支配置.动态刷新. ...
- MERN——MongoDB && React && Node && Express
原文链接:Let’s build a full stack MongoDB, React, Node and Express (MERN) app github源码地址:jelorivera08/re ...
- Qt编写控件属性设计器5-属性中文
一.前言 在上一篇文章中就提到过,使用qtpropertybrowser来加载属性,对应加载到的属性是英文的,也就是控件类中Q_PROPERTY描述的变量名称,如何变成中文或者其他语言显示呢?这个就需 ...