입법예고의견 자동화

국회입법예고 의견을 보다 쉽게 입력이 가능합니다

目前為 2025-02-21 提交的版本,檢視 最新版本

  1. // ==UserScript==
  2. // @name 입법예고의견 자동화
  3. // @namespace http://tampermonkey.net/
  4. // @version v1.0
  5. // @description 국회입법예고 의견을 보다 쉽게 입력이 가능합니다
  6. // @license MIT
  7. // @author nancy
  8. // @match https://pal.assembly.go.kr/napal/lgsltpa/*
  9. // @match https://vforkorea.com/assem/*
  10. // @icon https://vforkorea.com/favicon.ico
  11. // @grant none
  12. // @require http://code.jquery.com/jquery-latest.js
  13. // ==/UserScript==
  14.  
  15. //vforkorea alt+a로 선택영역 링크열기
  16. //제안이유 스킵하기, 스페이스,엔터로 넘기기,3초후 자동넘기기
  17. //제목,내용 자동입력, 보안입력감시, 보안문자입력 후 스페이스,엔터 입력시 확인클릭
  18. //`또는 alt+a 입력시 찬성,반대 토글
  19. //창 비활성화일 때 이미 등록시 3초후 종료
  20. //청원목록 3초 후 자동종료
  21. //*연속링크열기 후 보안문제 최초입력시 마지막링크 문자입력
  22. //크롬,엣지설치 확장 개발자모드로 변경,vforkorea 팝업허용
  23.  
  24. (function() {
  25.  
  26. 'use strict';
  27.  
  28. var yes_title = '찬성합니다' //제목 찬성 입력값
  29. var yes_content = '해당 법안을 강력히 찬성합니다' //내용 찬성 입력값(10자이상추천)
  30.  
  31. var no_title = '반대합니다' //제목 반대 입력값
  32. var no_content = '해당 법안을 강력히 반대합니다' //내용 반대 입력값(10자이상추천)
  33.  
  34. var lgsltpaOngoing_skip = true // 제안이유 스킵true false
  35. var delay1 =3000 //제안이유 클릭 대기시간 밀리초(ms)
  36. var delay2 =3000 //의견목록 탭종료 대기시간 밀리초(ms), 오류가능성 높음
  37. var monitor = true // 보안문자 입력 감시하기 예 true, 아니오 false
  38. var link_open_delay = 1500 //vkorea 링크 열기 딜레이
  39.  
  40. //console.log("청원자동화");
  41. if (document.URL.search("lgsltpaOngoing") != -1){
  42. //console.log('제안이유');
  43. if (lgsltpaOngoing_skip)window.location.href = document.URL.replace("lgsltpaOngoing/view","lgsltpaOpn/forInsert")
  44. else setTimeout(function (){$(".btn_opnReg")[0].click()},delay1)//3초 후 클릭
  45. }else if (document.URL.search("forInsert") != -1){
  46. //console.log('의견등록');
  47. if ($("#txt_sj").length == 0){
  48. setTimeout(function (){window.close();},3000) //비활성화 이미 등록시 3초 후 종료
  49. }else{
  50. //$("#reLoad")[0].click()//보안문제 리로드
  51. $( "h4:contains('의견 작성')" ).text($(".legislation-heading > h3").text())
  52. $( "h4:contains('보안문자 확인')" ).remove()
  53. $("#txt_sj")[0].style.height="30px"//제목
  54. $("#txt_cn")[0].style.height="30px"//내용
  55.  
  56.  
  57. $("#txt_sj")[0].value=no_title //제목
  58. $("#txt_cn")[0].value=no_content //내용
  59.  
  60. var catpcha = $("#catpchaAnswer")[0]
  61. catpcha.focus() //보안입력 포커스
  62. if(catpcha.value.length==5) catpcha.value = '';
  63.  
  64. if (monitor == true) monitor_catpcha()
  65.  
  66. const onVisible = async function () {
  67. if (document.visibilityState){ // 페이지(탭) 활성화 시 동작
  68. console.log('활성화');
  69. //$("#reLoad")[0].click()//보안문자 리로드
  70. //$("#soundOnKor")[0].click()//보안문자 사운드
  71. };}
  72. document.addEventListener('visibilitychange', onVisible);
  73. }
  74. }else if (document.URL.search("forUpdate") != -1){//수정
  75. $( "h4:contains('의견 작성')" ).text($(".legislation-heading > h3").text())
  76. $("#txt_sj")[0].style.height="30px"//제목
  77. $("#txt_cn")[0].style.height="30px"//내용
  78. $("#txt_cn").focus()
  79. }else if (document.URL.search(/list.do/i) != -1){
  80. //console.log("의견 목록")
  81. setTimeout(function() {window.close();}, delay2);//3초후 종료
  82. }
  83.  
  84. if (document.URL.search(/vforkorea.com/i) != -1)
  85. document.addEventListener('keydown', onkeydown, false);//키입력 감시
  86. else
  87. document.addEventListener('keydown', onkeydown2, false);//키입력 감시
  88.  
  89. function monitor_catpcha()
  90. {//보안문자 입력 감시
  91. let lastUpdateTime = 0
  92. let cancelTimer
  93. //console.log('보안입력 감시')
  94. cancelTimer = requestAnimationFrame(animationPerSecond)
  95.  
  96. function animationPerSecond(timestamp) {
  97. const actionTime = new Date()
  98. let l
  99. if (actionTime - lastUpdateTime > 500 ) {//500ms 주기 감시
  100. l = $("#catpchaAnswer")[0].value.length
  101. if(l==5){
  102. sendform()
  103. cancelAnimationFrame(cancelTimer )
  104. return
  105. }
  106. lastUpdateTime = actionTime
  107. }
  108. requestAnimationFrame(animationPerSecond)
  109. }
  110. }
  111.  
  112. function sendform()
  113. {
  114. trimAllInputText();
  115. if (!validate()) {
  116. return false;
  117. }
  118. $(".loading_bar").show();
  119. checkWebFilter($("#frm"));
  120. }
  121.  
  122. function getSelectedContentLinks2(sel)
  123. {
  124. var range = sel.getRangeAt(0);
  125. var URLtoOpen = [];
  126. var selectionContents = range.cloneContents();
  127. var div = document.createElement("div");
  128. div.appendChild(selectionContents);
  129. var urllist=div.getElementsByTagName('a');
  130. console.log(urllist);
  131. for (var i in urllist)
  132. {
  133. //console.log(urllist[i].href);
  134. if (urllist[i].href != undefined && urllist[i].href.match(/pal.assembly.go.kr.+lgsltpaOngoing/i))
  135. if (URLtoOpen.indexOf(urllist[i].href) == -1)
  136. URLtoOpen.push(urllist[i].href);
  137. }
  138. //console.log(URLtoOpen);
  139. return URLtoOpen
  140. }
  141.  
  142. function isSelected(sel) { return !sel.isCollapsed; }
  143.  
  144. function onkeydown(event)
  145. {//vkorea 선택영역 링크열기
  146. var sel = event.view.getSelection();
  147. if ((event.keyCode == 192) || event.altKey && event.keyCode == 65 ){ /* ` or alt+a*/
  148. if (isSelected(sel)) {
  149. let links = getSelectedContentLinks2(sel);
  150. if (links.length != 0 ){
  151. //document.title = '[' + links.length + ']개 열기'
  152. //console.log(links);
  153. for (let j in links){
  154. setTimeout(function (x,y){
  155. document.title = '[' + x+'/'+y + ']개 열기'
  156. const vlink = document.createElement("a");
  157. vlink.target = "_blank";
  158. vlink.href = links[j]
  159. document.body.appendChild(vlink);
  160. vlink.click();
  161. vlink.remove();
  162. },link_open_delay*j,Number(j)+1, links.length)//1.5초 간격열기
  163. }
  164. }
  165. }
  166. }
  167. }
  168. function onkeydown2(event)
  169. {
  170. if (event.keyCode == 32 || event.keyCode == 13){ /* space or enter */
  171. if (document.URL.search("lgsltpaOngoing") != -1)
  172. $(".btn_opnReg")[0].click()
  173. else if (document.URL.search(/orInsert|forUpdate/i) != -1)
  174. sendform()
  175. else if (document.URL.search(/list.do/) != -1)
  176. window.close();
  177. }else if ((event.keyCode == 192) || event.altKey && event.keyCode == 65 ){ /* ` or alt+a*/
  178. if ( $("#txt_sj")[0].value.indexOf("반대") != -1 ){
  179. $("#txt_sj")[0].value=yes_title //제목
  180. $("#txt_cn")[0].value=yes_content //내용
  181. document.title = '찬성합니다.'
  182. }else{
  183. $("#txt_sj")[0].value=no_title //제목
  184. $("#txt_cn")[0].value=no_content //내용
  185. document.title = '반대합니다.'
  186. }
  187. if (document.URL.search("forUpdate") != -1)
  188. $("#catpchaAnswer")[0].focus() //보안문제 포커스
  189. }
  190. }
  191.  
  192. })();

QingJ © 2025

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