QuHouLibary

QuHou's Libary

此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.cn-greasyfork.org/scripts/517325/1483922/QuHouLibary.js

  1. // ==UserScript==
  2. // @name QuHouLibary
  3. // @namespace http://quhou.net/
  4. // @version 0.1
  5. // @description QuHou's Libary
  6. // @match http://*/*
  7. // @match https://*/*
  8. // @license MIT
  9. // ==/UserScript==
  10.  
  11. (function() {
  12. 'use strict';
  13.  
  14. // 创建一个对象来存储我们的工具函数
  15. const qq = {
  16. /**
  17. * @param {string} selector
  18. * @return {HTMLElement}
  19. * */
  20. findDom(selector,parent = document) {
  21. const startTime = new Date().getTime()
  22. return new Promise((resolve, reject) => {
  23. const id = setInterval(() => {
  24. const dom = parent.querySelector(selector)
  25. if (dom) {
  26. clearInterval(id)
  27. resolve(dom)
  28. } else if (new Date().getTime() - startTime > 1000 * 30) {
  29. clearInterval(id)
  30. reject(`无法找到此dom元素: ${selector}`)
  31. }
  32. }, 200)
  33. })
  34. },
  35. /**
  36. * @param {string} selector
  37. * @return {HTMLElement[]}
  38. * */
  39. findAllDom(selector,parent = document) {
  40. const startTime = new Date().getTime()
  41. return new Promise((resolve, reject) => {
  42. const id = setInterval(() => {
  43. const doms = [...new Set(parent.querySelectorAll(selector))]
  44. if (doms.length > 0) {
  45. clearInterval(id)
  46. resolve(doms)
  47. } else if (new Date().getTime() - startTime > 1000 * 30) {
  48. clearInterval(id)
  49. reject(`无法找到此dom元素: ${selector}`)
  50. }
  51. }, 200)
  52. }).catch(err => console.log(err))
  53. },
  54. findShadowDom(selector,parent=document) {
  55. const startTime = new Date().getTime()
  56. return new Promise((resolve, reject) => {
  57. const id = setInterval(() => {
  58. const result = parent.querySelector(selector);
  59. if (result) return result;
  60. const shadowRoots = parent.querySelectorAll('*');
  61. for (const root of shadowRoots) {
  62. if (root.shadowRoot) {
  63. const found = this.findShadowDom(selector,root.shadowRoot);
  64. if (found){
  65. clearInterval(id)
  66. resolve(found)
  67. }else if (new Date().getTime() - startTime > 1000 * 30) {
  68. clearInterval(id)
  69. reject(`无法找到此dom元素: ${selector}`)
  70. }
  71. }
  72. }
  73. }, 200)
  74. }).catch(err => console.log(err))
  75. },
  76. randomNum(start, end) {
  77. return Math.floor(Math.random() * (end - start + 1)) + start
  78. },
  79. isNumber(v) {
  80. return typeof v === 'number' && isFinite(v);
  81. }
  82. }
  83. qq.log = true
  84. window.qq = qq;
  85. qq.log && console.log("qq tool is loaded")
  86. })();