news 2026/5/7 21:17:47

cookie池的搭建与维护-2

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
cookie池的搭建与维护-2

[Cookie实战]一键部署大批量的Cookie调试环境

Cookie池项目介绍

web项目,统一管理账号密码,以及维护Cookie
【定时】全自动根据账号密码登录并提取Cookie
【被动】协助式绕过验证码实现登录并获取Cookie
主动提供接口API,实现Cookie的使用
高可用的预留拓展接口

实践操作:Cookie池项目源码介绍


  • Cookie #是添加的App应用

    • 包含主要的模型(models.py)和主要的任务(tasks.py)
  • cookiemanage和manage.py是基础的行为文件

  • celerybeat-schedule.db和cookiemanage-django.sqlite3是数据库文件

  • cookiemanage

    • celery.py 这个文件不要动
    • urls.py 拓展链接的时候可以在urlpatterns里面加


- wsgi.py 这个文件也不要动
- settings.py

  • cookie
    • migrations 这是一个App
    • 我们需要做的是模型models,任务tasks,views
    • models.py
fromdjango.dbimportmodelsfromdjango.utils.timezoneimportnow#web账号的模型classWebModel(models.Model):# 网站的名称name=models.CharField(default='',max_length=64,verbose_name="网站名称")#登录的网址loginurl=models.CharField(default='',max_length=255,verbose_name="登录网址")#首页的网址indexurl=models.CharField(default='',max_length=255,verbose_name="首页网址")#判断登录是自动化登录还是半自动化的协助登录HALF_OR_AUTO=(('auto','auto'),('half','half'))half_or_auto_get_cookie=models.CharField(choices=HALF_OR_AUTO,default='auto',max_length=32,verbose_name="全自动或半自动获取Cookie")#提取Cookie的脚本extract_cookie_script=models.TextField(default='',verbose_name="提取Cookie的Python脚本",blank=True,null=True)#脚本的选择SCRIPT=(('python','python'),('javascript','javascript'),('default','default'))active_cookie_use_python_or_javascript_script=models.CharField(max_length=64,choices=SCRIPT,default='default',verbose_name="选择使用脚本")active_js_script=models.TextField(default='',verbose_name="活跃Cookie的JS脚本",blank=True,null=True)wait_exec_active_js_script=models.IntegerField(default=100,verbose_name="等待JS执行的时间")active_python_script=models.TextField(default='',verbose_name="活跃Cookie的Python脚本",blank=True,null=True)def__str__(self):returnf"{self.name}网站,目前有{self.accounts.count()}个会员账号"#账号模型classAccountModel(models.Model):#属于哪个网站web=models.ForeignKey(to=WebModel,on_delete=models.CASCADE,related_name="accounts",verbose_name="归属网站")#账号username=models.CharField(default='',max_length=64,verbose_name="账号")#密码password=models.CharField(default='',max_length=64,verbose_name="密码")#获取Cookiecookie=models.TextField(default='',verbose_name="Cookie",blank=True,null=True)opera_datetime=models.DateTimeField(verbose_name="操作时间",auto_now=True)@propertydefactive_cookie_use_python_or_javascript_script(self):returnself.web.active_cookie_use_python_or_javascript_scriptdef__str__(self):#默认输出时的内容returnf"{self.username}账号归属于{self.web.name},当前Cookie:{self.cookie}"defto_dict(self):temp_dict={'web':{'name':self.web.name,'loginurl':self.web.loginurl,'indexurl':self.web.indexurl,},'id':self.id,'username':self.username,'password':self.password,'extract_cookie_script':self.web.extract_cookie_script,}returntemp_dictdefcookie_to_dict(self):temp_dict={'web':{'name':self.web.name,'loginurl':self.web.loginurl,'indexurl':self.web.indexurl,},'id':self.id,'username':self.username,'cookie':self.cookie,'active_cookie_use_python_or_javascript_script':self.web.active_cookie_use_python_or_javascript_script,'active_js_script':self.web.active_js_script,'wait_exec_active_js_script':self.web.wait_exec_active_js_script,'active_python_script':self.web.active_python_script,}returntemp_dict#活动记录的模型,账号记录classActiveRecordModel(models.Model):#创建了哪个账号account=models.ForeignKey(to=AccountModel,on_delete=models.CASCADE,related_name="active_record",verbose_name="归属账号")#账号做了哪些操作opera=models.CharField(default='',verbose_name="操作",max_length=128,null=True,blank=True)#开始时间start_datetime=models.DateTimeField(default=now,verbose_name="开始时间")#结束时间end_datetime=models.DateTimeField(default=now,verbose_name="结束时间")def__str__(self):returnf"{self.account.username}活跃记录,进行了{self.opera}操作,开始于{self.start_datetime}, 结束于{self.end_datetime}"
  • task任务
fromceleryimportshared_task,taskimportrandom,datetime,json,requestsfromlxmlimportetreefromtimeimportsleepfromdjango.utils.timezoneimportnowfromcookie.modelsimportAccountModel,WebModel,ActiveRecordModelfromdjango.db.modelsimportQ@taskdefcheck_account_need_auto_get_cookie():#检测账号是否需要自动读取Cookieaccounts=AccountModel.objects.filter(cookie='')#检测没有Cookie的账号foracinaccounts:#ac是提取账号的名称ifac.web.half_or_auto_get_cookie=='auto':#看一下他的站是否是自动的,如果是自动的就自动提取如果不是就半自动提取auto_get_cookie(ac)# print(ac)@taskdefauto_get_cookie(account):#自动提取Cookiestart_datetime=now()#开始name=account.web.name#账号的名称ifname=='shanzhi':#最好用英文的名称如果是shanzhi这个网站就到website这里面来了fromwebsite.shanzhi.auto_get_cookieimportmain status,cookie=main(account.username,account.password)ifstatus:#如果状态码为trueaccount.cookie=cookie account.save()#保存一下就可以了else:returnFalse#如果失败返回falseelse:returnFalseend_datetime=now()#结束时间arm=ActiveRecordModel(account=account,opera='自动登录提取Cookie',start_datetime=start_datetime,end_datetime=end_datetime)arm.save()#记录操作returnTrue@taskdefcheck_account_cookie_need_active():accounts=AccountModel.objects.filter(Q(web__active_cookie_use_python_or_javascript_script='default'),~Q(cookie='')).order_by('-opera_datetime')[:2]foracinaccounts:activate_cookie(ac)@taskdefactivate_cookie(account):start_datetime=datetime.datetime.now()# print(account.cookie,'-------------')cookie_dict=json.loads(account.cookie)session=requests.Session()session.cookies=requests.utils.cookiejar_from_dict(cookie_dict)num=1whilenum<=5:response=session.get(account.web.indexurl)html=etree.HTML(response.text)links=html.xpath(".//a/@href")link=random.choice(links)ifnotlink:end_datetime=datetime.datetime.now()arm=ActiveRecordModel(account=account,start_datetime=start_datetime,end_datetime=end_datetime)arm.save()returnFalsesession.get(link)sleep(random.randint(4,20))num+=1cookies_dict=requests.utils.dict_from_cookiejar(session.cookies)cookies_str=json.dumps(cookies_dict)account.cookie=cookies_str account.save()end_datetime=datetime.datetime.now()arm=ActiveRecordModel(account=account,opera='活跃Cookie',start_datetime=start_datetime,end_datetime=end_datetime)arm.save()returnTrue
  • website 需要注册
    • 在settings文件中,找到INSTALLED_APPS进行注册




Cookie池项目介绍

  • 涉及技术:Django,Celery,远程协调
    • celery 异步,用于定时比较方便
  • 部署方式:单机部署+协助拓展
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/30 23:01:29

自学嵌入式day31,waitpid,system 函数

waitpid 和 wait 函数waitpid(-1, status, 0) 等同于 wait(status)。 waitpid 函数原型为 pid_t waitpid(pid_t pid, int *status, int options)。参数说明&#xff1a;pid 取值决定回收的子进程范围&#xff1a;<-1&#xff1a;回收指定进程组内的任意子进程。-1&#xff1…

作者头像 李华
网站建设 2026/5/5 18:14:06

泛型继承实战指南(高级程序员必知的3个隐秘特性)

第一章&#xff1a;泛型的继承在面向对象编程中&#xff0c;继承是构建可复用、可扩展代码结构的核心机制。当泛型与继承结合使用时&#xff0c;能够实现更加灵活和类型安全的类层次结构。泛型类可以像普通类一样被继承&#xff0c;子类可以固定父类中的类型参数&#xff0c;也…

作者头像 李华
网站建设 2026/4/30 22:57:34

Symfony 8路由系统重构:从延迟2秒到毫秒级响应的优化之路

第一章&#xff1a;Symfony 8路由系统重构&#xff1a;从延迟2秒到毫秒级响应的优化之路在 Symfony 8 的新版本中&#xff0c;路由系统经历了一次深度重构&#xff0c;显著提升了请求解析性能。以往在复杂路由配置下可能出现接近 2 秒的响应延迟&#xff0c;如今已优化至毫秒级…

作者头像 李华
网站建设 2026/5/7 1:15:19

GraphQL + PHP缓存优化:99%开发者忽略的6个关键实践

第一章&#xff1a;GraphQL PHP缓存优化的核心挑战在构建高性能的现代Web应用时&#xff0c;GraphQL与PHP的结合为开发者提供了灵活的数据查询能力&#xff0c;但同时也带来了显著的缓存优化难题。由于GraphQL允许客户端按需请求字段&#xff0c;传统的基于完整页面或接口响应…

作者头像 李华
网站建设 2026/5/2 23:04:43

5、Linux 文件压缩、归档与文本文件管理全解析

Linux 文件压缩、归档与文本文件管理全解析 1. Linux 中的文件压缩 在 Linux 系统里,文件压缩是一项常见且重要的操作,它能有效节省磁盘空间。下面为你介绍几种常用的压缩工具及其使用方法。 1.1 xz 压缩 xz 是 Linux 中空间利用率最高的压缩工具,不过它的压缩速度相对较…

作者头像 李华
网站建设 2026/4/30 23:32:49

6、Linux 文本文件管理实用指南

Linux 文本文件管理实用指南 在 Linux 系统的操作环境中,系统管理员、开发者以及普通用户常常会与文本文件、配置文件和日志文件打交道。这些文件的大小不一,有的文件体积庞大,有的则属于中小型文件。文件中的数据经常需要查看、更新或提取。接下来,我们将详细介绍如何在 …

作者头像 李华