验证码处理+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':'[email protected]',  #邮箱
        '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')      

原文地址:https://www.cnblogs.com/notfind/p/11505022.html

时间: 2024-08-10 20:38:22

验证码处理+cookie模拟登录的相关文章

Java通过httpclient获取cookie模拟登录

package Step1; import org.apache.commons.httpclient.Cookie; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.NameValuePair; import org.apache.commons.httpclient.cookie.CookiePolicy; import org.apache.commons.httpc

Python3之利用Cookie模拟登录

利用Cookie模拟登录步骤: 1.       在浏览器输入http://demo.bxcker.com,输入用户名和密码登录. 2.登录成功点"客户管理"模块. 3. 进入客户管理模块,显示客户列表. 4.通过抓包工具抓取客户列表,得到登录后的Cookie信息. GET http://demo.bxcker.com/customer/index.shtml HTTP/1.1 Host: demo.bxcker.com Connection: keep-alive Pragma: n

cookie模拟登录

cookie模拟登录 1.适用网站几场景 抓取需要登录才能访问的页面 2.cookie和session机制 # http协议为无连接协议 cookie: 存放在客户端浏览器 session: 存放在Web服务器 人人网登录案例 方法一.登录网站手动抓取Cookie 1.先登录成功1次,获取到携带登录信息的Cookie 登录成功-个人主页-F12抓包-刷新个人主页-找到主页的包(profile) 2.携带着cookie发请求 Cookie User-Agent import requests cl

php教程 CURL实现带有验证码网站的模拟登录的方法

网上的很多模拟登录程序,大都是通过服务程序apache之类的运行,获取到验证码之后显示在网页上,然后填上再POST出去 本文提供了一个程序实例,思路就是获取到验证码之后把验证码存储为一个图片,然后程序休眠20秒,在20秒之后由用户手动查看图片,并把验证码填写到code.txt文件中,20秒休眠完成后,程序会读code.txt的验证码,这样再带着验证码进行登录操作.具体代码如下: /** * 模拟登录 */ //初始化变量 $cookie_file = "tmp.cookie"; $lo

PHP获取Cookie模拟登录

一.定义Cookie存储路径 必须使用绝对路径 $cookie_jar = dirname(__FILE__)."/pic.cookie"; //$cookie_file = dirname(__FILE__).'/cookie.txt'; //$cookie_file = tempnam("tmp","cookie"); 二.获取Cookie $url = "http://1.2.3.4/"; $ch = curl_init

爬虫实战篇---使用Scrapy框架进行模拟登录(包括借助阿里云服务自动识别验证码)

(1).前言 原理分析:我们编写代码模拟向网站发出登录请求,也就是提交包含登录信息的表单(用户名.密码等). 实现方式:当我们想在请求数据时发送post请求,这时候需要借助Request的子类FormRequest来实现,如果想进一步在爬虫一开始时就发送post请求,那么我们需要重写start_request()方法,舍弃原先的start_url()(采用get请求) (2).模拟登录人人网(例子1) 1.创建项目 scrapy startproject renren---cd renren--

C#使用tesseract3.02识别验证码模拟登录

一.前言 使用tesseract3.02识别有验证码的网站 安装tesseract3.02 在VS nuget 搜索Tesseract即可. 二.项目结构图 三.项目主要代码 1 using System; 2 using System.Collections.Concurrent; 3 using System.Collections.Generic; 4 using System.Diagnostics; 5 using System.Drawing; 6 using System.IO;

curl 模拟登录微信公众平台带验证码

这段时间一直写个项目, 从切图到前端到后台都要搞定,真tm累. 今天下午手残,不停用错误的密码去模拟登录微信公众平台,结果后来出现验证码,瞬间悲剧(菜鸟从来没搞过带验证码的). 研究了一下,发现其实很简单,直接把生成的二维码图片拉过来,让用户自己输入,再提交一遍表单即可.其实中间还是有些坑,比如生成验证码的时候,要把cookie保存下,登录的时候要带上这个cookie,要不然会总是提示需要验证码. 客户端: 1 <body> 2 <form> 3 <p><inpu

php通过curl扩展进行模拟登录(含验证码)

以下为本人工作中遇到的需要做的事情,之前也没怎么用过curl,查了好多资料,才稍微弄明白一点:本文所有内容只是自己平日工作的记录,仅供大家参考: <?php/*** 模拟登录*/header("Content-type: text/html; charset=UTF-8");//初始化变量$cookie_file = "valid.tmp";$login_url = "http://v3.gds.org.cn/login.aspx";$ve