关于脚本获取数据写入本地json文件的实现问题请教
我是小白,最近在学着写一个法宣在线网站自动学习的脚本,法宣的规则是每天学习够5分钟得5分,每天最多得50分,每做一个练习题得10分,每天最多50分,一个练习题可以重复做重复得分,目前自动学习的功能已经完美实现,关于做练习题我想实现的功能是我先找答案做题,当点击了答案就自动把题目和答案写入本地的json文件,后面再遇到和这个一样的题目,就会从本地的json文件中匹配,然后自动点击正确答案,现在点击答案获取数据已经实现,但是在把数据写入本地json文件上遇到了问题,在网上找了好多方法都没有解决,刚开始用了FileSaver.js,但这个只是保存文件,后又在网上看到nodejs的fs.writeFile可以解决,就安装了nodejs,但我在脚本里写const fs = require("fs")就报错了,说require未定义,也就是脚本没有nodejs环境,在网上查了好多都不知道怎么办,也没有关于油猴和nodejs相关的话题,试了在本地写一个js文件,然后用@require引入js文件也不行,实在没招了,所以请教大佬,这个怎么来实现,能实现吗,数据上传服务器暂时没考虑,之前买过一年的服务器做过影视站,但服务器已经到期了,写脚本期间还遇到一个问题,到现在也没解决,也是在做练习这个页面,我用了document.onreadystatechange = function() { if (document.readyState == "complete") {} }还有window.onload,里面的代码无论怎么都不会执行,网上说是网页一样造成了多个绑定,但是我试了addEventListener("load",function(){})也没用,下面是所有的脚本代码,麻烦大佬给看看`// ==UserScript==
// @name 法宣在线自动学习
// @namespace http://tampermonkey.net/
// @version 1.3
// @descriptiontry to take over the world!
// @author Amen
// @match http://www.faxuanyun.com/bps/frame/t/frame.html?*
// @match http://www.faxuanyun.com/sps/courseware/t/courseware_1_t.html?*
// @match http://www.faxuanyun.com/sps/exercises/t/exercies_3_t.html?*
// @icon https://www.google.com/s2/favicons?sz=64&domain=faxuanyun.com
// @grant none
// ==/UserScript==
(function() {
'use strict';
// Your code here...
document.onreadystatechange = function(){
if (document.readyState == "complete") {
//第一个页面进入课程
if (document.location.href.indexOf("http://www.faxuanyun.com/bps/frame/t/frame.html") > -1 ) {
var courses = document.querySelectorAll("#page .kc_img");
var courses_sum = courses.length;
var course_num = Math.ceil(Math.random()*courses_sum) - 1; //在所有课程中随机点击一个进入
var course_study = courses;
var point = Number(document.querySelector("#todypoint").innerHTML);
if (point < 50) {
course_study.click();
setTimeout(function() {
location.reload();
}, 1000*60*5+1000*10);
}
}
//第二个页面开始学习
if (document.location.href.indexOf("http://www.faxuanyun.com/sps/courseware/t/courseware_1_t.html") > -1 ) {
var courses_sub = document.querySelectorAll("#kejmc-box-id a");
var courses_sub_sum = courses_sub.length;
var course_sub_num = Math.ceil(Math.random()*courses_sub_sum) - 1; //在课程列表中随机点击一个学习
var course_sub_study = courses_sub;
course_sub_study.click();
setTimeout(function() {
var start_study = document.querySelector("#inBtnDiv > a");
start_study.click();
}, 3000);
setInterval(function() {
var study_time = document.querySelector("#ware_time_num").innerHTML;
if (study_time == "00:05:01") {
var exit_btn = document.querySelector("#exitCourse");
exit_btn.click();
setTimeout(function() {
var exit_study = document.querySelectorAll("#exitBtnDiv > a");
exit_study.click();
}, 2000);
}
}, 1000);
}
}
}
//第三个页面做练习题,目前只能做《中华人民共和国反有组织犯罪法》这一个课程
if (document.location.href.indexOf("http://www.faxuanyun.com/sps/exercises/t/exercies_3_t.html") > -1 ) {
setTimeout(function() {
var title = document.querySelector("#ti_title").innerText.replace(/\d、/,""); //题目
console.log(title);
var options = document.querySelectorAll("#ti_item input"); //选项
const fs = require("fs");
//从选项中获得选择的答案
for (var i=0; i<options.length; i++) {
(function(i) {
var select = options;
select.addEventListener("click", function() {
var ans = document.querySelectorAll("#ti_item > li").innerText;
console.log(ans);
//将题目和答案写入本地json文件
var tiku = {"题目":title, "答案":ans};
tiku = JSON.stringify(tiku, 4);
console.log(tiku);
//fs.writeFile("E:\study\exam\题库.json", tiku, err=> {
//if(err) {
//console.log("写入出错了");
//}
//}
})
})(i);
}
//var next_btn = document.querySelector("#ulPage > a:last-child");
}, 2000);
}
})();`
浏览器好像因为安全原因是禁止写入本地文件的,只能生成一个文件让你手动下载
然后读取的话可以通过油猴的@resource file://+@grant GM_getResourceText读(不清楚能不能反向写,印象中是不行的)
// @resource FILE file://......
// @grant GM_getResourceText
// ==/UserScript==
let abc=GM_getResourceText(FILE)
另外我建议你把数据存储在油猴内,用油猴内置的函数读存,这样比较方便,如果要下载到本地的话需要手动复制出来
// @grant GM_setValue
// @grant GM_getValue 我建议本地起一个http服务器,用python或php写一个接口,将题目数据存入数据库来实现 分享一个写着玩的题库API
https://bbs.tampermonkey.net.cn/thread-1643-1-1.html
(出处: 油猴中文网)
这个您可能需要,只需要配置一下go环境和mysql就可以用了 steven026 发表于 2022-7-11 12:37
浏览器好像因为安全原因是禁止写入本地文件的,只能生成一个文件让你手动下载
然后读取的话可以通过油猴的@ ...
谢谢大佬 Ne-21 发表于 2022-7-11 13:03
分享一个写着玩的题库API
https://bbs.tampermonkey.net.cn/thread-1643-1-1.html
(出处: 油猴中文网)
谢谢大佬,就是说油猴脚本想用nodejs是用不了的对吧 Ne-21 发表于 2022-7-11 12:54
我建议本地起一个http服务器,用python或php写一个接口,将题目数据存入数据库来实现 ...
谢谢,python和php我也懂一点,我下一步的学习目标就是想建一个搜题的公众号,服务器要重新整起来了 84864694 发表于 2022-7-11 14:12
谢谢大佬,就是说油猴脚本想用nodejs是用不了的对吧
nodejs我并不是很了解,我只是提供给你一个可行的方法 油猴是浏览器环境
不能执行nodejs环境代码的
你还是要写一个服务器端
有兴趣可以学一下nodejs或者php 李恒道 发表于 2022-7-11 15:23
油猴是浏览器环境
不能执行nodejs环境代码的
你还是要写一个服务器端
好的,谢谢大佬
页:
[1]