news 2026/9/24 15:57:27

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/9/24 17:06:02

Windows启动:解析一个 Java 服务的后台启动脚本

在日常 Java 服务运维中&#xff0c;一个可靠的服务启动脚本至关重要。今天我们来深入解析一个名为 start.bat 的 Windows 批处理脚本&#xff0c;它展示了如何优雅地启动一个名为 "demo" 的 Java 服务。脚本概览这个脚本采用系统化方法启动一个打包在 demo.jar 中的…

作者头像 李华
网站建设 2026/9/25 6:05:17

高维金融风险怎么破?5步掌握R语言Copula参数估计实战技巧

第一章&#xff1a;高维金融风险的挑战与Copula模型的崛起在现代金融工程中&#xff0c;风险管理的核心在于准确刻画多个资产之间的依赖结构。随着金融市场全球化和金融工具复杂化&#xff0c;传统的线性相关系数已无法充分描述极端市场条件下的尾部依赖现象。在此背景下&#…

作者头像 李华
网站建设 2026/8/31 5:52:42

Font Awesome 方向图标

Font Awesome 方向图标&#xff08;Arrows Directional Icons&#xff09;详解 Font Awesome 的 Arrows 类别提供了丰富的方向性图标&#xff0c;包括各种箭头、指向符号、旋转箭头等&#xff0c;非常适合导航菜单、分页、排序、滑动控件、地图指示等场景。这些图标几乎全部属…

作者头像 李华
网站建设 2026/9/25 4:25:03

低代码时代PHP配置存储如何选型:3种方案对比与最佳实践

第一章&#xff1a;低代码时代PHP配置存储的挑战与机遇在低代码平台迅速普及的背景下&#xff0c;PHP作为长期活跃于Web开发领域的语言&#xff0c;其传统的配置管理方式正面临重构。开发者依赖硬编码或分散的.env文件存储配置信息&#xff0c;已难以满足动态环境切换、多实例部…

作者头像 李华
网站建设 2026/9/25 3:09:06

【稀缺技术曝光】全球仅3家公司掌握的量子服务编排核心技术揭秘

第一章&#xff1a;量子服务集成的演进与战略意义随着量子计算从理论探索走向工程实现&#xff0c;传统信息系统与量子能力的融合成为技术前沿的重要方向。量子服务集成通过将量子算法、量子密钥分发和量子传感等能力封装为可调用的服务模块&#xff0c;实现了与经典计算架构的…

作者头像 李华