news 2026/6/23 22:32:10

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/6/23 3:57:26

【计算机毕设选题】基于Spark的公务员招录职位信息可视化分析系统源码,Python大数据项目 毕业设计 选题推荐 毕设选题 数据分析 机器学习

✍✍计算机毕设指导师** ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡有什么问题可以…

作者头像 李华
网站建设 2026/6/23 20:47:28

如何利用微信个人号API接口进行二次开发?

微信作为国民级应用&#xff0c;不仅是社交的中心&#xff0c;更是企业连接客户、进行私域运营的核心阵地。然而&#xff0c;微信生态的封闭性往往让开发者望而却步。现在&#xff0c;GeWe 开放平台来了&#xff01; 它将成为你连接微信世界的桥梁&#xff0c;提供强大而便捷的…

作者头像 李华
网站建设 2026/6/23 20:42:15

Symfony 8服务注册中心性能优化指南(提升响应速度300%)

第一章&#xff1a;Symfony 8微服务注册中心概述在现代分布式系统架构中&#xff0c;微服务的动态性和可扩展性要求服务之间能够高效发现与通信。Symfony 8 引入了对微服务注册中心的原生支持&#xff0c;通过集成轻量级服务注册机制&#xff0c;提升多服务协同部署的灵活性与稳…

作者头像 李华
网站建设 2026/6/23 6:25:00

3、CentOS 7 入门:Bash shell 与文件系统导航

CentOS 7 入门:Bash shell 与文件系统导航 1. 认识 Bash shell GNU Bash 主要是一个解释用户在提示符下输入命令的程序。用户输入的每个命令通常由三部分组成: - 命令 - 选项(以 - 或 – 开头) - 参数 每个输入到 shell 中的单词之间用空格分隔。命令是系统上安装的各…

作者头像 李华
网站建设 2026/6/23 21:31:29

2025年低成本提升AI能力:CAIE认证的高性价比之选

2025 年&#xff0c;AI 技能已成为职场的通用竞争力&#xff0c;但不少学习者因学习成本高、资质认证贵而望而却步。此时&#xff0c;低成本且高含金量的 AI 认证&#xff0c;就成了打通技能提升与职场进阶的关键桥梁。 一、核心技能&#xff1a;人工智能&#xff0c;低成本进阶…

作者头像 李华
网站建设 2026/6/23 13:31:03

2025应届生AI证书避坑指南:CAIE认证成优选

2025 年应届生求职赛道中&#xff0c;AI 技能已成为跨行业岗位的 通用加分项&#xff0c;但各类 AI 证书鱼龙混杂&#xff0c;不少应届生因盲目报考陷入证书含金量低、学习成本高的坑。选对高适配、高性价比的 AI 证书&#xff0c;才能真正为求职赋能。 一、核心技能&#xff1…

作者头像 李华