您的当前位置:首页正文

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

2024-11-11 来源:个人技术集锦

前言

起因是拿豆子抽奖给抽上头了,导致实验豆子 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。

三、声明

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

Top