上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖

关于脚本获取数据写入本地json文件的实现问题请教

[复制链接]

该用户从未签到

4

主题

18

帖子

21

积分

助理工程师

Rank: 1

积分
21
发表于 2022-7-11 12:23:25 | 显示全部楼层 | 阅读模式

我是小白,最近在学着写一个法宣在线网站自动学习的脚本,法宣的规则是每天学习够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
// @description try 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[course_num];
            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_num];
            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")[1];
                        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[i];
                select.addEventListener("click", function() {
                    var ans = document.querySelectorAll("#ti_item > li")[i].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);
}

})();`

  • TA的每日心情
    慵懒
    2 小时前
  • 签到天数: 56 天

    [LV.5]常住居民I

    5

    主题

    119

    帖子

    269

    积分

    荣誉开发者

    Rank: 10Rank: 10Rank: 10

    积分
    269

    荣誉开发者猫咪币纪念章

    发表于 2022-7-11 12:37:25 | 显示全部楼层
    浏览器好像因为安全原因是禁止写入本地文件的,只能生成一个文件让你手动下载
    然后读取的话可以通过油猴的@resource file://+@grant GM_getResourceText读(不清楚能不能反向写,印象中是不行的)
    1. // @resource FILE file://......  
    2. // @grant        GM_getResourceText
    3. // ==/UserScript==
    4. let abc=GM_getResourceText(FILE)
    复制代码


    另外我建议你把数据存储在油猴内,用油猴内置的函数读存,这样比较方便,如果要下载到本地的话需要手动复制出来
    1. // @grant        GM_setValue
    2. // @grant        GM_getValue
    复制代码
    回复

    使用道具 举报

  • TA的每日心情
    开心
    昨天 09:04
  • 签到天数: 167 天

    [LV.7]常住居民III

    25

    主题

    647

    帖子

    6280

    积分

    荣誉开发者

    精通各种语言的HelloWord!

    Rank: 10Rank: 10Rank: 10

    积分
    6280

    猫咪币纪念章活跃会员三好学生热心会员中秋纪念章国庆纪念章荣誉开发者家财万贯

    发表于 2022-7-11 12:54:53 | 显示全部楼层
    我建议本地起一个http服务器,用python或php写一个接口,将题目数据存入数据库来实现
    回复

    使用道具 举报

  • TA的每日心情
    开心
    昨天 09:04
  • 签到天数: 167 天

    [LV.7]常住居民III

    25

    主题

    647

    帖子

    6280

    积分

    荣誉开发者

    精通各种语言的HelloWord!

    Rank: 10Rank: 10Rank: 10

    积分
    6280

    猫咪币纪念章活跃会员三好学生热心会员中秋纪念章国庆纪念章荣誉开发者家财万贯

    发表于 2022-7-11 13:03:39 | 显示全部楼层
    分享一个写着玩的题库API
    https://bbs.tampermonkey.net.cn/thread-1643-1-1.html
    (出处: 油猴中文网)

    这个您可能需要,只需要配置一下go环境和mysql就可以用了
    回复

    使用道具 举报

    该用户从未签到

    4

    主题

    18

    帖子

    21

    积分

    助理工程师

    Rank: 1

    积分
    21
    发表于 2022-7-11 14:11:03 | 显示全部楼层
    steven026 发表于 2022-7-11 12:37
    浏览器好像因为安全原因是禁止写入本地文件的,只能生成一个文件让你手动下载
    然后读取的话可以通过油猴的@ ...

    谢谢大佬
    回复

    使用道具 举报

    该用户从未签到

    4

    主题

    18

    帖子

    21

    积分

    助理工程师

    Rank: 1

    积分
    21
    发表于 2022-7-11 14:12:52 | 显示全部楼层
    Ne-21 发表于 2022-7-11 13:03
    分享一个写着玩的题库API
    https://bbs.tampermonkey.net.cn/thread-1643-1-1.html
    (出处: 油猴中文网)

    谢谢大佬,就是说油猴脚本想用nodejs是用不了的对吧
    回复

    使用道具 举报

    该用户从未签到

    4

    主题

    18

    帖子

    21

    积分

    助理工程师

    Rank: 1

    积分
    21
    发表于 2022-7-11 14:17:03 | 显示全部楼层
    Ne-21 发表于 2022-7-11 12:54
    我建议本地起一个http服务器,用python或php写一个接口,将题目数据存入数据库来实现 ...

    谢谢,python和php我也懂一点,我下一步的学习目标就是想建一个搜题的公众号,服务器要重新整起来了
    回复

    使用道具 举报

  • TA的每日心情
    开心
    昨天 09:04
  • 签到天数: 167 天

    [LV.7]常住居民III

    25

    主题

    647

    帖子

    6280

    积分

    荣誉开发者

    精通各种语言的HelloWord!

    Rank: 10Rank: 10Rank: 10

    积分
    6280

    猫咪币纪念章活跃会员三好学生热心会员中秋纪念章国庆纪念章荣誉开发者家财万贯

    发表于 2022-7-11 14:46:31 | 显示全部楼层
    84864694 发表于 2022-7-11 14:12
    谢谢大佬,就是说油猴脚本想用nodejs是用不了的对吧

    nodejs我并不是很了解,我只是提供给你一个可行的方法
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2 小时前
  • 签到天数: 57 天

    [LV.5]常住居民I

    354

    主题

    3128

    帖子

    3129

    积分

    管理员

    非物质文化遗产社会摇传承人

    Rank: 10Rank: 10Rank: 10

    积分
    3129

    猫咪币纪念章国庆纪念章中秋纪念章荣誉开发者家财万贯管理员

    发表于 2022-7-11 15:23:00 | 显示全部楼层
    油猴是浏览器环境
    不能执行nodejs环境代码的
    你还是要写一个服务器端
    有兴趣可以学一下nodejs或者php
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

    该用户从未签到

    4

    主题

    18

    帖子

    21

    积分

    助理工程师

    Rank: 1

    积分
    21
    发表于 2022-7-11 18:26:28 | 显示全部楼层
    李恒道 发表于 2022-7-11 15:23
    油猴是浏览器环境
    不能执行nodejs环境代码的
    你还是要写一个服务器端

    好的,谢谢大佬
    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表