当前位置: 首页 > news >正文

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 异步,用于定时比较方便
  • 部署方式:单机部署+协助拓展
http://www.cnnetsun.cn/news/67946.html

相关文章:

  • 【计算机毕设选题】基于Spark的公务员招录职位信息可视化分析系统源码,Python大数据项目 毕业设计 选题推荐 毕设选题 数据分析 机器学习
  • 如何利用微信个人号API接口进行二次开发?
  • Symfony 8服务注册中心性能优化指南(提升响应速度300%)
  • 3、CentOS 7 入门:Bash shell 与文件系统导航
  • 2025年低成本提升AI能力:CAIE认证的高性价比之选
  • 2025应届生AI证书避坑指南:CAIE认证成优选
  • 如何利用PHP 8.6的JIT指令优化实现毫秒级响应?
  • 【Symfony 8路由安全进阶指南】:掌握参数验证的5大核心技巧
  • 从传感器到图表:PHP实现农业数据实时可视化的5个关键步骤
  • 业务导向型技术日志首日记录(业务中使用的技术栈)
  • 基于SpringBoot + Vue的宠物殡葬网站设计
  • 基于Uniapp + SpringBoot + Vue的中医个性化养生系统的设计与实现
  • 亲测有效:打印机驱动程序无法使用的完整解决思路
  • ollama pull qwen:32b命令执行失败原因排查
  • 基于Uniapp + SpringBoot + Vue的高校就业招聘系统的设计与实现
  • Qwen3-32B适合哪些行业?金融、医疗、法律应用场景解析
  • 创业团队用 XinServer 提升项目交付效率实战
  • 交换机上各种接口
  • Google Vids:由AI驱动的工作视频创作 | ProductHunt 今日热榜 - 12月15日
  • 情感智能对话系统AI Agent:LLM驱动的深度交互
  • HDFS在大数据分析中的数据访问与处理优化
  • 自动驾驶—CARLA仿真(8)tutorial demo
  • 从被动响应到主动赋能:家具行业客服机器人的革新路径
  • AI辅助可再生能源发电预测:从气象数据到电力市场
  • 细节定成败!鹧鸪云让储能配置精准落地
  • 基于Qwen3-8B构建智能对话系统:从ollama下载到部署
  • 模块化公链的2025:动态分片、AI审计与量子安全的成本革命
  • 从Transformer模型详解到Seed-Coder-8B-Base的应用落地
  • 8、Qt 编程中的文件、流与 XML 处理
  • 9、Qt应用程序中的用户帮助功能实现