首页 > 其他分享 >基于蓝桥杯实验豆不够衍生出的【假装学习】方法

基于蓝桥杯实验豆不够衍生出的【假装学习】方法

时间:2024-11-06 20:16:11浏览次数:3  
标签:请求 random json 蓝桥 假装 cookie print 衍生 response

前言

首先是感谢两位大佬给的思路@okfang616@kkkkkba ,下方是两位大佬的原贴地址https://blog.csdn.net/m0_52537917/article/details/136222428?spm=1001.2014.3001.5502

起因是拿豆子抽奖给抽上头了,导致实验豆子 3 = 100 痛失97实验豆 

在咨询小蓝得知这个豆子给的是真的太抠了,签到一天才1豆子,这可忍不了。

开会员直接pass掉,能白嫖谁会愿意付钱捏,于是变衍生出了“假装学习”

一、详细步骤

1.打开题库界面

2.随便找一题进入
3.按F12进入控制台(console)

4.复制这段代码,粘贴运行

注意:第一次使用控制台粘贴,会出现如下一段话警告

请勿将代码粘贴到你不理解或尚未审阅自己的 DevTools 控制台。这可能导致攻击者窃取你的身份或控制你的计算机。请在下面键入“允许粘贴”以允许粘贴。

需要输入”允许粘贴“才能使用。

setInterval(() => {
    sessionStorage.setItem("oj_learned", "1");
    console.log("oj_learned set ok!")
}, 1000)

至此其实已经能够实现“假装学习”了,但是众所周知,既然学计算机,那肯定是能脚本的事儿,肯定不会去挂个浏览器,于是脚本版出现了。

5.获取cookie

输入以下代码回车后,我们能得到一个如图所示的字符串,时效性没有做过多测试。

document.cookie

6.复制粘贴

将上方获得的字符串填写在代码中,便能实现“假装学习”刷取楼层和豆子了

import time
import random
import requests
import json
import uuid
import re

# 定义倒计时函数
def countdown(seconds):
    for i in range(seconds, 0, -1):
        print(f"重新请求倒计时 {i} 秒", end="\r")
        time.sleep(1)

# 设置cookie(根据需要进行更新或替换)
cookie = '此处填放你自己的cookie字符串'

problems = "995"

print(f"cookie: {cookie}")
print(f"problems: {problems}")

# 更加多样化的 User-Agent
user_agents = [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Edge/91.0.864.54",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36",
    "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:60.0) Gecko/20100101 Firefox/60.0",
    "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:64.0) Gecko/20100101 Firefox/64.0"
]

# 定义请求头,加入更多变化
headers = {
    'DNT': '1',
    'Cookie': cookie,
    'User-Agent': random.choice(user_agents),
    'Content-Type': 'application/json',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': random.choice(['en-US,en;q=0.9', 'zh-CN,zh;q=0.9']),
    'Connection': 'keep-alive',
    'Referer': 'https://www.lanqiao.cn/',
    'Origin': 'https://www.lanqiao.cn'
}

# 随机增加模拟的页面交互行为
def simulate_page_interaction():
    actions = ['scroll', 'click']
    action = random.choice(actions)
    if action == 'scroll':
        print("模拟页面滚动...")
        time.sleep(random.uniform(0.5, 2))  # 随机滚动延时
    elif action == 'click':
        print("模拟页面点击...")
        time.sleep(random.uniform(0.2, 1))  # 随机点击延时

# 无限循环发送 POST 请求
while True:
    try:
        # 模拟用户交互
        simulate_page_interaction()

        payload = json.dumps({
            "page_ident": uuid.uuid4().hex
        })

        # 使用 requests 发送 POST 请求
        response = requests.post(
            f"https://www.lanqiao.cn/api/v2/problems/{problems}/record/",
            headers=headers, data=payload
        )

        # 打印响应内容
        print(response.text)

        # 处理返回的 JSON 数据
        response_json = response.json()

        if response.status_code != 200 and response_json.get("code") == "limit_exceed":
            # 提取重试秒数
            retry_seconds = int(re.search(r"(\d+)秒", response_json.get("message")).group(1))
            print(f"请求超过了限速,{retry_seconds}秒后重试。")
            countdown(retry_seconds + random.randint(1, 5))  # 增加一些随机的延时
        elif response.status_code == 200:
            print("请求成功,休眠一段时间...")
            time.sleep(random.randint(170, 190))  # 请求之间的随机间隔

    except requests.exceptions.RequestException as e:
        print(f"请求出现异常: {e}")
        time.sleep(random.randint(60, 120))  # 在请求失败时等待随机时间,避免重复失败

相比于前两个大佬的代码,站在大佬的肩上做了一些小改进。改进后的代码在伪装请求头、处理频繁请求时的反限流策略、错误恢复和请求随机化等方面有了些许改进,使得其更具有防范机制,并能在请求受到限制时平稳进行。


二、存在的问题

1.平台检测问题

题目库在某些情况下可以通过随机处理来避免连续刷同一题目。由于时间关系,此部分的具体实现细节未展开。随着平台对单题刷时长的监控不断加强,未来可能会采取措施检测单题刷取时长异常,因此建议在刷题时加入随机题目选择的策略,并避免过长时间集中在某个题目上,以减少被平台检测到的风险。

2.Cookie的时效性

当前,蓝桥云课平台的cookie时效性未做特别的验证,因此需要用户定期检查并更新cookie。为了避免由于cookie过期导致程序中断,可以采取以下几种方式:

  • 使用自动登录功能获取新的cookie。
  • 定期检测cookie的有效性,并在cookie失效时自动更新。
    目前的代码没有内建cookie过期自动更新机制,若cookie失效,自行手动按步骤重新获取并替换cookie。

三、声明

本文章仅供学习与技术探讨之用,所有内容均为个人理解和经验分享,不得用于任何商业用途或其他非法活动。文章中的代码、技术方案或其他信息仅供参考,作者不对因使用本文内容而产生的任何后果承担责任。

标签:请求,random,json,蓝桥,假装,cookie,print,衍生,response
From: https://blog.csdn.net/qq_52014827/article/details/143576489

相关文章

  • 第十三届蓝桥杯Python 大学 B 组 数位排序
    数位排序问题描述小蓝对一个数的数位之和很感兴趣,今天他要按照数位之和给数排序。当两个数各个数位之和不同时,将数位和较小的排在前面,当数位之和相等时,将数值小的排在前面。例如,2022排在409前面,因为2022的数位之和是6,小于409的数位之和13。又如,......
  • 蓝桥杯【第13届省赛】Python B组 C题
    C:纸张尺寸【问题描述】    在ISO国际标准中定义了A0纸张的大小为1189mm×841mm,将A0纸沿长边对折后为A1纸,大小为841mm×594mm,在对折的过程中长度直接取下整(实际裁剪时可能有损耗)。将A1纸沿长边对折后为A2纸,依此类推。     输入纸张的名称......
  • 蓝桥杯排序算法之low B三人组——冒泡,插入,选择
    目录一、题目二、分析三、代码一、题目分别用冒泡,插入,选择对列表li=[3,2,4,5,1,8,6,9,7]进行排序二、分析冒泡排序:它重复地走访要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经......
  • 蓝桥杯每日一练--搜索旋转排序数组
    目录一、题目二、分析三、代码一、题目整数数组 nums 按升序排列,数组中的值 互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0<=k<nums.length)上进行了 旋转,使数组变为 [nums[k],nums[k+1],...,nums[n-1],nums[0],nums[1],...,nums[k-1]](......
  • 蓝桥杯2022年题目解
    问题描述十进制整数 22 在十进制中是 11 位数,在二进制中对应 1010 ,是 22 位数。十进制整数 2222 在十进制中是 22 位数,在二进制中对应 1011010110 ,是 55 位数。请问十进制整数 20222022 在二进制中是几位数?解法一:#include<stdio.h>#include<stdlib.h......
  • 蓝桥算法
    1.https://www.lanqiao.cn/problems/19954/learning/?contest_id=214这道题用快速幂直接秒,而快速幂就是求一个数的次方很大的时候,我们可以把指数分解为二进制的形式,再有a的b*c次方等于a的b次方乘以a的c次方,在用一个数存储一下即可。代码如下:defqui(x,y):res=1whiley:if......
  • java+vue计算机毕设动漫衍生品二手交易app【开题+程序+论文+源码】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着动漫文化的兴起与普及,动漫衍生品市场日益繁荣,吸引了大量粉丝与收藏者的关注。这些衍生品不仅丰富了动漫爱好者的精神世界,也成为了他们表达个性与......
  • 蓝桥杯备赛&学习计划 2024.11—2025.4
    学习计划概览2024年11月到12月-巩固基础,学习基本算法。2025年1月到2月-学习中级算法和数据结构。2025年3月-进阶算法学习和刷题练习。2025年4月-复习重点知识,专注于比赛准备。详细周计划2024年11月:基础知识&基础算法第1-2周:复习基本控制结构(循环、条件语......
  • 备战蓝桥杯JAVA B组Day10
    备战蓝桥杯JAVAB组Day10目录备战蓝桥杯JAVAB组Day10前言P1428小鱼比可爱P1427小鱼的数字游戏P5727【深基5.例3】冰雹猜想P1047[NOIP2005普及组]校门外的树P5728【深基5.例5】旗鼓相当的对手前言零基础小白备战蓝桥杯第十天,刷题内容为:洛谷题单【入门3】循......
  • 蓝桥杯省赛——顺子日期
    小明特别喜欢顺子。顺子指的就是连续的三个数字:123、456等。顺子日期指的就是在日期的 yyyymmdd 表示法中,存在任意连续的三位数是一个顺子的日期。例如20220123就是一个顺子日期,因为它出现了一个顺子:123;而20221023则不是一个顺子日期,它一个顺子也没有。小明想知道在整......