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

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

[复制链接]

该用户从未签到

5

主题

17

回帖

27

积分

助理工程师

积分
27
发表于 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的每日心情
    慵懒
    7 小时前
  • 签到天数: 603 天

    [LV.9]以坛为家II

    30

    主题

    523

    回帖

    1379

    积分

    荣誉开发者

    积分
    1379

    荣誉开发者新人进步奖油中2周年生态建设者新人报道挑战者 lv2油中3周年喜迎中秋

    发表于 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的每日心情
    开心
    昨天 18:07
  • 签到天数: 684 天

    [LV.9]以坛为家II

    27

    主题

    733

    回帖

    7199

    积分

    荣誉开发者

    精通各种语言的HelloWord!

    积分
    7199

    荣誉开发者油中2周年生态建设者油中3周年挑战者 lv2

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

    使用道具 举报

  • TA的每日心情
    开心
    昨天 18:07
  • 签到天数: 684 天

    [LV.9]以坛为家II

    27

    主题

    733

    回帖

    7199

    积分

    荣誉开发者

    精通各种语言的HelloWord!

    积分
    7199

    荣誉开发者油中2周年生态建设者油中3周年挑战者 lv2

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

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

    使用道具 举报

    该用户从未签到

    5

    主题

    17

    回帖

    27

    积分

    助理工程师

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

    谢谢大佬
    回复

    使用道具 举报

    该用户从未签到

    5

    主题

    17

    回帖

    27

    积分

    助理工程师

    积分
    27
    发表于 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是用不了的对吧
    回复

    使用道具 举报

    该用户从未签到

    5

    主题

    17

    回帖

    27

    积分

    助理工程师

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

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

    使用道具 举报

  • TA的每日心情
    开心
    昨天 18:07
  • 签到天数: 684 天

    [LV.9]以坛为家II

    27

    主题

    733

    回帖

    7199

    积分

    荣誉开发者

    精通各种语言的HelloWord!

    积分
    7199

    荣誉开发者油中2周年生态建设者油中3周年挑战者 lv2

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

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

    使用道具 举报

  • TA的每日心情
    开心
    2023-2-28 23:59
  • 签到天数: 191 天

    [LV.7]常住居民III

    620

    主题

    5084

    回帖

    5958

    积分

    管理员

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

    积分
    5958

    荣誉开发者管理员油中2周年生态建设者喜迎中秋

    发表于 2022-7-11 15:23:00 | 显示全部楼层
    油猴是浏览器环境
    不能执行nodejs环境代码的
    你还是要写一个服务器端
    有兴趣可以学一下nodejs或者php
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

    该用户从未签到

    5

    主题

    17

    回帖

    27

    积分

    助理工程师

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

    好的,谢谢大佬
    回复

    使用道具 举报

    发表回复

    本版积分规则

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