[油猴脚本]—-网课答案提示

释放双眼,带上耳机,听听看~!

有一些网课需要刷,然后发现一个app(火星搜题)挺准的用它接口实现此脚本。不发gf了(因为涉及api需要抓包),在这里给需要的人使用吧。(我自己刷完了,便测试边做题,写完了不能浪费就发出来了,gf上也没找到火星搜题下载能用的,多是接口失效)。

脚本内configs添加选择规则可实现其它网课答案搜索。
目前已实现 长江雨课堂 学堂在线
[油猴脚本]----网课答案提示

长江雨课堂示意
[油猴脚本]----网课答案提示

学堂在线示意
[油猴脚本]----网课答案提示

功能:
自定火星搜题答案脚本义父级节点安置查询到的答案,自动过滤不可靠的答案,自动帮你选火星搜题择,用户要做的只有提交。
理论上加上一些语句可以全程自动化做题提交,但我不信没有bug。

// ==UserScript==
// @name AnswerTip
// @namespace http://tampermonkey.net/
// @version 0.1
// @author polygon
// @match https://changjiang.yuketang.cn/*/exercise/*
// @match https://www.xuetangx.com/*/exercise/*
// @grant GM_xmlhttpRequest
// @grant GM_addStyle
// @runat document-end
// ==/UserScript==

(function() {
const order = ['A', 'B', 'C', 'D', 'E', 'F', 'G']
const n = 10
let currentQuestion = ''
const configs = {
'changjiang.yuketang.cn': {
question: '.problem-body', // 问题,题目所在位置,其innerText属性是问题(不含选项)
answer: '.item-body', // 答案要展示的父级元素节点,会append到该Node下
options: '.item-body ul li label', // 每个选项的位置,会根据它匹配多个Node
select: 'is-checked', // 点击后,相应属性增加值,因为有的选项需要多次点击,所以增加此用于判断是否点击上
// 一些自定义添加的答案区域style
style: `
background-color: #f5f5f5;
`
},
'www.xuetangx.com': {
question: '.leftQuestion',
answer: '.courseActionLesson',
options: '.leftradio',
select: 'active',
style: `
background-color: #fcfcfc;
border: 1px solid hsla(0,0%,81.2%,.31);
width: 500px;
height: 200px;
overflow-y: scroll;
`
}
}
let url = window.location.href
let host = Object.keys(configs).filter((host) => {
if (url.includes(host)) {
return true
}
return false
})
if (host.length == 0) return
const config = configs[host[0]]
GM_addStyle(`
.answer-polygon {
${config.style};
font-size: 14px;
border-radius: 4px;
padding: 10px 15px;
margin-bottom: 20px;
text-align: left;
font-family: -apple-system,SF UI Text,Arial,PingFang SC,Hiragino Sans GB,Microsoft YaHei,WenQuanYi Micro Hei,"sans-serif";
}
`)
let id = setInterval(() => {
let questionNode = document.querySelector(config.question)
if (questionNode == null) return
let text = questionNode.innerText.slice(0, 233)
if (text == currentQuestion) return
currentQuestion = text
let answerNode = document.querySelector(config.answer + ' .answer-polygon')
if (answerNode == null) {
answerNode = document.createElement('div')
answerNode.setAttribute('class', 'answer-polygon')
document.querySelector(config.answer).append(answerNode)
}
try {
answerNode.innerHTML = 'searching...'
} catch {
return
}
let optionNodes = document.querySelectorAll(config.options)
searchAnswer(text, answerNode, optionNodes)
// clearInterval(id)
}, 1000);

let clickOption = (optionNodes, text) => {
optionNodes.forEach((optionNode) => {
if (optionNode.innerText.replaceAll('[p]', '').replaceAll('[/p]', '').split('\n').slice(-1) == text) {
let id = setInterval(() => {
if (!optionNode.innerHTML.includes(config.select)) {
optionNode.click()
} else {
clearInterval(id)
}
}, 100)
}
})
}
let searchAnswer = (text, answerNode, optionNodes) => {
GM_xmlhttpRequest({
method: 'POST',
url: 'https://schoolapi.fenbi.com/college/android/search-item/search?format=ubb&searchType=2&text=' + encodeURIComponent(text),
headers: {
'cookie': 'tourist=; userid=; sid=' // 抓包获取
},
onload: function (xhr) {
console.log(xhr)
const data = JSON.parse(xhr.responseText)['data']
if (data == null) {
answerNode.innerHTML = 'retry...'
setTimeout(() => {
currentQuestion = ''
}, 1000);
return
}
let s = ''
let answer_groups = []
for (let i=0;i<n;i++) {
let item = data['questionList'][i]
console.log(item)
// 1 题目
s += item['content'].replaceAll('[', '<').replaceAll(']', '>') + '<br/>'
const re = new RegExp("[`~!@#$^&*()=|{}':;',\\[\\].<>/?~!@#¥……&*()——|{}【】‘;:”“'。,、?%+_]", 'g');
let same = item['content'].replaceAll(re, '').includes(currentQuestion.replaceAll(re, '').split('\n')[0])
if (same) {
answer_groups.push([])
}
// 2 正确答案
// 2.1 选项形式 ABCD
if (item['correctAnswer'].hasOwnProperty('choice')) {
let choice_indexes = item['correctAnswer']['choice'].split(',')
if (choice_indexes.length > 0) {
let choice_orders = []
for (let j=0;j<choice_indexes.length;j++) {
let choice_order = order[parseInt(choice_indexes[j])]
if (!choice_orders.includes(choice_order)) {
choice_orders.push(choice_order)
}
}
s += '<p>' + choice_orders.join('') + '</p><br/>'
// choice_orders = ['A', 'B', 'C']
// 选项
if (item['accessories'].length > 0){
item['accessories'] = item['accessories'].filter((item) => {
return (item.hasOwnProperty('options'))
})
let options = item['accessories'][0]['options']
if (options.length > 0) {
for (let j=0;j<options.length;j++) {
if (choice_orders.includes(order[j])) {
if (same) {
answer_groups[answer_groups.length-1].push(options[j])
}
// if (same) clickOption(optionNodes, options[j])
s += `<b>[${order[j]}] ` + options[j] + '</b><br/>'
} else {
s += `[${order[j]}] ` + options[j] + '<br/>'
}

}

}
}
}
// 2.2 文字描述形式
} else if (item['correctAnswer'].hasOwnProperty('answer')) {
console.log(item['correctAnswer']['answer'])
text = item['correctAnswer']['answer']
.replace('', '<br/>')
.replace('\u0001', '<br/>')
.replace('\x01', '<br/>')
.replace(/-+/g, '<br/>')
.replaceAll('[', '<')
.replaceAll(']', '>')
.replace(';;', ';')
if (same) {
text.replace('<p>', '')
.replace('</p>', '')
.split('<br/>')
.forEach((option_text) => {
answer_groups[answer_groups.length-1].push(option_text)
// clickOption(optionNodes, option_text)
})
}
s += '<b>' + text + '</b>'
}
if (i < n-1) {
s += '<br/><hr/><br/>'
}
}
console.log(answer_groups)
// 判断是否为多选
let multi = false
answer_groups.forEach((group) => {
if (group.length > 1) {
multi = true
}
})
if (multi) {
answer_groups = answer_groups.filter((group) => {
return group.length > 1
})
}
console.log(answer_groups)
let answers = []
if (answer_groups.length == 1) {
answers = answer_groups[0]
} else {
// 取交集
// 得到所有答案元素
let answer_items = []
answer_groups.forEach((group) => {
group.forEach((item) => {
if (!answer_items.includes(item)) {
answer_items.push(item)
}
})
})
answers = answer_items.filter((item) => {
let b = true
answer_groups.forEach((group) => {
if (!group.includes(item)) {
b = false
}
})
return b
})
}
console.log(answers)
answers.forEach((answer) => {
clickOption(optionNodes, answer)
})
answerNode.innerHTML = s
},
ontimeout: function () {
answer.innerHTML = "No Sugesstion"
}
})
}
})();

 

脚本内cookie需要在火星搜题app上抓包获取,每天有调用次数限制,所以每个人自己用自己抓

[wm_error]关于抓取Cooke加密请移步这篇文章[/wm_error]

【过程】解决COOKIE 加密求解

给TA打赏
共{{data.count}}人
人已打赏
站长资源

超强TV神器,无需注册登录,各种收费功能免费使用

2022-4-7 19:44:58

站长资源

一句“烂梗”让《假面骑士》火出圈了,“中配”为何会出洋相?

2022-4-9 16:06:03

免责声明

本站资源大多来自网络,如有侵犯你的权益请联系管理员,邮箱momeis6@qq.com 根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。 本站为个人博客非盈利性站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途,网站会员捐赠是您喜欢本站而产生的赞助支持行为,仅为维持服务器的开支与维护,全凭自愿无任何强求。本站部份代码及教程来源于互联网,仅供网友学习交流,若您喜欢本文可附上原文链接随意转载。


如果遇到付费才可观看的文章,建议升级终身VIP。全站所有资源任意下免费看”。本站资源大部分采用7z压缩,为防止有人压缩软件不支持7z格式,7z解压,建议下载7-zip,zip、rar解压,建议下载WinRAR

16 条回复 A文章作者 M管理员
  1.  闲鱼

    什么时候修复修复,一直无法显示隐藏内容

    • 墨梅

      可能你浏览器缓存

  2.  闲鱼

    出bug了?显示不了隐藏啊

  3.  闲鱼

    评论之后没用啊,怎么刷新也不显示

  4.  闲鱼

    评论后还是看不了隐藏内容,坏了吗??

  5.  闲鱼

    评论后还是看不了隐藏内容,坏了吗?

  6.  闲鱼

    学习一下学习一下?

  7.  闲鱼

    学习一下学习一下

  8. bjy

    。。。。。。。之后

  9.  闲鱼

    抓包后返回的数据是加密数据,求楼主告诉怎么解密:”code”:1,”errMessage”:null,”msg”:null,”data”:”msE8iHD7vy/X+Dk1GuSRP5CC7PZ3mdjVgUS2W+SdTpHGYieKyj5zjL3IFpEi/018Mu7nXN/Wbv6vx5h8tsLOl1d34xLGKb9HtCPCAbRUiJwwn4M1MNln2d6bpYH6f7Vjt9nbkfZvDFpRYfp1AFoLN+1e9x61Meyu7O2YJ6MNq91oVPQoPpPNfMy5ydilkznADEAbg73pYAQJ0CFrgij1xvSxEisOuljv+G/

    • 墨梅

      骚年看看这篇文章:https://momeis.net/post-64539.html

  10. ༄༊࿆中二ོྂཾ࿆࿐

    抓包后返回的数据是加密数据,求楼主告诉怎么解密:”code”:1,”errMessage”:null,”msg”:null,”data”:”msE8iHD7vy/X+Dk1GuSRP5CC7PZ3mdjVgUS2W+SdTpHGYieKyj5zjL3IFpEi/018Mu7nXN/Wbv6vx5h8tsLOl1d34xLGKb9HtCPCAbRUiJwwn4M1MNln2d6bpYH6f7Vjt9nbkfZvDFpRYfp1AFoLN+1e9x61Meyu7O2YJ6MNq91oVPQoPpPNfMy5ydilkznADEAbg73pYAQJ0CFrgij1xvSxEisOuljv+G/

    0

    0

  11. bjy

    抓包后返回的数据是加密数据,求楼主告诉怎么解密:”code”:1,”errMessage”:null,”msg”:null,”data”:”msE8iHD7vy/X+Dk1GuSRP5CC7PZ3mdjVgUS2W+SdTpHGYieKyj5zjL3IFpEi/018Mu7nXN/Wbv6vx5h8tsLOl1d34xLGKb9HtCPCAbRUiJwwn4M1MNln2d6bpYH6f7Vjt9nbkfZvDFpRYfp1AFoLN+1e9x61Meyu7O2YJ6MNq91oVPQoPpPNfMy5ydilkznADEAbg73pYAQJ0CFrgij1xvSxEisOuljv+G/

  12. bjy

    xuexiyi

  13. Remi

    学习一下

  14. Remi

    妙啊

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索