twjx / 菁优网扣题工具

// ==UserScript==
// @name         菁优网扣题工具
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  菁优网扣题工具,现在只能扣数学部分的选择题和填空题,代码有点乱,没时间整理
// @author       twjx
// @match        https://www.jyeoo.com/math/report/detail/*
// @icon         https://img.jyeoo.net/favicon3.ico
// @require      https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js
// @copyright 2025, twjx (https://openuserjs.org/users/twjx)
// @updateURL https://openuserjs.org/meta/twjx/菁优网扣题工具.meta.js
// @downloadURL https://openuserjs.org/install/twjx/菁优网扣题工具.user.js
// @license MIT
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    var newdata=[]
Array.from(document.querySelector('#detail').children).forEach((e,h)=>{
    if(isEven(h)){
        newdata.push({name:e.innerText,body:null})
    }else{
        newdata[(h-1)/2].body=e
    }
})
function isEven(number) {
    return !(number % 2);
}
function Multiple_choice_questionsdata(array){
    const answerdiv = Array.from(array[0].children[1].children[0].children[0].children)
    const answer = {
        type:'',
        answer:[],
        true:'',
    }
    answerdiv.forEach((e)=>{
        Array.from(e.children).forEach((e,h)=>{
            if(e.children[0].querySelector('.img')==null){
                answer.type = 'text'
                answer.answer.push(gettext(e.children[0]))
            }else{
                answer.type = 'img'
                answer.answer.push({
                    answer:gettext(e.children[0]),
                    img:e.children[0].children[0].src,
                })
            }
            if(e.children[0].className=='s sh'){
                answer.true = h+1
            }
        })
    })
    const question = {
        type:'',
        questiontext:gettext(array[0].children[0]),
        questionimg:'',
    }
    if(array[0].children[0].querySelector('.img')==null){
        question.type = 'text'
        question.questionimg=undefined
    }else{
        question.type = 'img'
        question.questionimg = array[0].children[0].children[0].src
    }
    return {
        question:question,
        answer:answer,
    }
}
function Fill_in_the_blank_questions(array){
    return {
        question:gettext(array[0].children[0]).replace(array[0].children[0].querySelector('.sanwser').textContent,'____'),
        answer:gettext(array[0].children[0].querySelector('.sanwser')),
    }
}
function mathjye(div){
    if(div.querySelector('.msqrt')){//根号
        return div.textContent
    }else if(div.querySelector('.mfrac')){//分式
        var div1=div.querySelector('.mfrac')
        div.children[0].removeChild(div1)
        var text=div.textContent+'('+div1.querySelector('.fracZi').textContent+')/'+div1.querySelector('.fracMu').textContent
        div.children[0].appendChild(div1)
        return text
    }
}
function gettext(div){
    try{
    if(div.querySelector('.MathJye')){
        var a=div.querySelector('.MathJye')
        div.querySelector('.MathJye').innerHTML=mathjye(a)
        var text=div.textContent
        Object.assign(div.querySelector('.MathJye').children,a.children)
        return text
    }else {
        return div.textContent
    }
}catch(e){console.log(div)}
}
var dataaa={
    name:document.querySelector('.paper-title').textContent.replaceAll(' ','').replaceAll('\n',''),
    'Multiple_choice_questions':[],
    'Fill_in_the_blank_questions':[],
}
window.get=function(){
Array.from(newdata[0].body.children).forEach((e)=>{
    dataaa.Multiple_choice_questions.push(Multiple_choice_questionsdata(Array.from(e.children)))
})
Array.from(newdata[1].body.children).forEach((e)=>{
    dataaa.Fill_in_the_blank_questions.push(Fill_in_the_blank_questions(Array.from(e.children)))
})
    setTimeout(()=>{window.generateDocx(dataaa)},3000)
}
window.generateDocx=async function(dataaa) {
      try {
        const jsonData = dataaa
        const docxDataURL = 'data:application/vnd.openxmlformats-officedocument.wordprocessingml.document;base64,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'

              // 1. 将 DataURL 转换为 ArrayBuffer
        const base64Data = docxDataURL.split(',')[1];
        const arrayBuffer = Uint8Array.from(atob(base64Data), c => c.charCodeAt(0)).buffer;

        // 2. 加载 DOCX 到 JSZip
        const zip = await JSZip.loadAsync(arrayBuffer);

        const documentXml = await zip.file('word/document.xml').async('text');
    const parser = new DOMParser();
    const xmlDoc = parser.parseFromString(documentXml, 'text/xml');
    const ns = 'http://schemas.openxmlformats.org/wordprocessingml/2006/main';
    const body = xmlDoc.getElementsByTagNameNS(ns, 'body')[0];

    // 清空原有内容
    while (body.firstChild) {
      body.removeChild(body.firstChild);
    }

    // 分页控制参数
    let currentLines = 0;
    const maxLinesPerPage = 35; // 根据实际模板调整(约A4纸30-40行)

    // 处理选择题
    const mcQuestions = jsonData.Multiple_choice_questions;
    mcQuestions.forEach((q, index) => {
      const questionLines = 1 + q.answer.answer.length; // 题目+选项行数

      // 智能分页判断
      if (currentLines + questionLines > maxLinesPerPage) {
        addPageBreak(body, ns, xmlDoc);
        currentLines = 0;
      }

      // 添加题目
      addParagraph(body, `${q.question.questiontext}`, ns, xmlDoc);

      // 添加选项
      q.answer.answer.forEach((opt, optIndex) => {
        addParagraph(body, /*${String.fromCharCode(65 + optIndex)}.*/`${opt}`, ns, xmlDoc);
      });

      currentLines += questionLines;
    });

    // 处理填空题前分页检查
    if (currentLines > 0 && currentLines + 1 > maxLinesPerPage) {
      addPageBreak(body, ns, xmlDoc);
      currentLines = 0;
    }

    // 处理填空题
    const fillQuestions = jsonData.Fill_in_the_blank_questions;
    fillQuestions.forEach((q, index) => {
      const questionLines = 1;

      if (currentLines + questionLines > maxLinesPerPage) {
        addPageBreak(body, ns, xmlDoc);
        currentLines = 0;
      }

      addParagraph(body, `${index + 11}. ${q.question} `, ns, xmlDoc);
      currentLines += questionLines;
    });
        //

        const serializer = new XMLSerializer();
        const modifiedXml = serializer.serializeToString(xmlDoc);

        // 4. 更新 ZIP 内容
        zip.file('word/document.xml', modifiedXml);

        // 5. 生成新 DOCX 并下载
        const newBlob = await zip.generateAsync({ type: 'blob' });
        const url = URL.createObjectURL(newBlob);

        const link = document.createElement('a');
        link.href = url;
        link.download = jsonData.name+'.docx';
        link.click();
        URL.revokeObjectURL(url);
        } catch (error) {
        console.error('生成文档失败:', error);
      }
    }
    // 添加段落工具函数
function addParagraph(parent, text, ns, xmlDoc) {
  const p = xmlDoc.createElementNS(ns, 'w:p');
  const r = xmlDoc.createElementNS(ns, 'w:r');
  const t = xmlDoc.createElementNS(ns, 'w:t');
  t.textContent = text;
  r.appendChild(t);
  p.appendChild(r);
  parent.appendChild(p);
}

// 添加分页符工具函数
function addPageBreak(parent, ns, xmlDoc) {
  const p = xmlDoc.createElementNS(ns, 'w:p');
  const r = xmlDoc.createElementNS(ns, 'w:r');
  const br = xmlDoc.createElementNS(ns, 'w:br');
  br.setAttributeNS(ns, 'w:type', 'page');
  r.appendChild(br);
  p.appendChild(r);
  parent.appendChild(p);

  // 添加空白段落
  addParagraph(parent, '', ns, xmlDoc);
}
})();