派蒙答题器

派蒙的十万个为什么,自动搜答案

当前为 2021-11-21 提交的版本,查看 最新版本

// ==UserScript==
// @name         派蒙答题器
// @namespace    http://tampermonkey.net/
// @version      0.2
// @description  派蒙的十万个为什么,自动搜答案
// @author       You
// @match        https://webstatic.mihoyo.com/*
// @grant        GM_xmlhttpRequest
// @license MIT
// ==/UserScript==

(function () {
  'use strict';
  GM_xmlhttpRequest({
    method: 'GET',
    url: 'https://wiki.biligame.com/ys/%E3%80%8C%E6%B4%BE%E8%92%99%E7%9A%84%E5%8D%81%E4%B8%87%E4%B8%AA%E4%B8%BA%E4%BB%80%E4%B9%88%E3%80%8D%E9%A2%98%E5%BA%93',
    onload(res) {
      var parser = new DOMParser();
      var dom = parser.parseFromString(res.response, "text/html");

      const check = () => {
        var quesElem = document.querySelector('[class|="components-game-assets-qa-info___text"]');
        var ques = quesElem && quesElem.textContent.slice(0, -1)
        dom.querySelectorAll('.wikitable tbody tr').forEach(elem => {
          if (elem.children[0].textContent.indexOf(ques) > -1) {
            var ans = elem.children[1].textContent
            quesElem.textContent += `  - ${ans}`
          }
        })
      }
      
      checkNodeMounted('[class|="components-game-assets-qa___qa-page"]').then(elem => {
        const observer = new MutationObserver(function (mutationList, observer) {
          check()
        })
        observer.observe(elem, { childList: true, subtree: true })
      })

      check()

    }
  })

  /**
* 检查Node是否被挂载
* @param {String} selector 要检查Node的selector
* @param {Node} container 执行检查的容器,默认为body,建议设置父节点以提高检查效率
*/
  function checkNodeMounted(selector, container = document.body) {
    // TODO: 为什么设置container后触发更多次?
    const $ = document.querySelectorAll.bind(document)
    return new Promise((resolve, reject) => {
      if (typeof selector !== 'string' || !(container instanceof Node)) {
        reject(new Error('Invalid param'))
      } else {
        const target = $(selector)
        if (target.length) {
          resolve(target)
        } else {
          const observer = new MutationObserver(function (mutationList, observer) {
            const target = $(selector)
            if (target.length) {
              observer.disconnect()
              resolve(target)
            } else {
              console.log(`waiting for $('${selector}') to mount`)
            }
          })
          observer.observe(container, { childList: true, subtree: true })
        }
      }
    })
  }

  /**
   * shortcut for document.querySelectorAll
   * @param {String} selector 
   */
  function $(selector) {
    return document.querySelectorAll.bind(document)
  }

})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址