前言
首先是感谢两位大佬给的思路@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