您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
PMP报名考试预约抢座油猴插件
// ==UserScript== // @name 2021PMP报名考试预约抢座油猴插件 // @namespace http://tampermonkey.net/ // @version 0.6 // @description PMP报名考试预约抢座油猴插件 // @author XieXiongKun [email protected] // @match http://*.chinapmp.cn/* // @grant unsafeWindow // @grant GM_setValue // @grant GM_getValue // @grant GM_registerMenuCommand // @require https://cdn.bootcdn.net/ajax/libs/jquery/2.2.4/jquery.js // ==/UserScript== (function() { 'use strict'; function insertUserForm(){ if($('#chinapmpForm').length>0){ return; } //生成可视化form表单 $('body').prepend(`<form id="chinapmpForm"><table class="table table-bordered" data-sort="sortDisabled"> <tbody> <tr class="firstRow"> <td valign="top" style="word-break: break-all; border-color: rgb(221, 221, 221);" width="135.33333333333334"> 用户名(基金会) </td> <td valign="top" style="word-break: break-all; border-color: rgb(221, 221, 221);" width="148.33333333333331"> <input style="text-align: left; width: 150px;" title="Login_uName" value="" name="Login_uName" orgheight="" orgwidth="150" orgalign="left" orgfontsize="" orghide="0" leipiplugins="text" orgtype="text"/> </td> <td valign="top" style="word-break: break-all; border-color: rgb(221, 221, 221);" width="103.33333333333333"> 密码(基金会) </td> <td valign="top" style="border-color: rgb(221, 221, 221); word-break: break-all;" width="288.3333333333333"> <span leipiplugins="select"><input name="Login_uPass" type="password" title="Login_uPass" value="" leipiplugins="text" orghide="0" orgalign="left" orgwidth="150" orgtype="text" style="text-align: left; width: 150px;" orgfontsize="" orgheight=""/></span> </td> </tr> <tr> <td valign="middle" style="word-break: break-all; border-color: rgb(221, 221, 221);" rowspan="1" colspan="4" align="center"> 约考信息 </td> </tr> <tr> <td valign="top" style="word-break: break-all; border-color: rgb(221, 221, 221);" width="78.00000000000001"> 姓 </td> <td valign="top" style="border-color: rgb(221, 221, 221); word-break: break-all;" width="148.33333333333331"> <input name="Xing" type="text" title="Xing" value="" leipiplugins="text" orghide="0" orgalign="left" orgwidth="150" orgtype="text" style="text-align: left; width: 150px;" orgfontsize="" orgheight=""/> </td> <td valign="top" style="word-break: break-all; border-color: rgb(221, 221, 221);" width="105"> 名 </td> <td valign="top" style="border-color: rgb(221, 221, 221); word-break: break-all;" width="288.3333333333333"> <input name="Ming" type="text" title="Ming" value="" leipiplugins="text" orghide="0" orgalign="left" orgwidth="150" orgtype="text" style="text-align: left; width: 150px;"/> </td> </tr> <tr> <td valign="top" colspan="1" rowspan="1" style="border-left-color: rgb(221, 221, 221); border-top-color: rgb(221, 221, 221); word-break: break-all;"> 培训机构 </td> <td valign="top" colspan="1" rowspan="1" style="border-left-color: rgb(221, 221, 221); border-top-color: rgb(221, 221, 221);"> <input name="Peixunjigou" type="text" title="Peixunjigou" value="" leipiplugins="text" orghide="0" orgalign="left" orgwidth="150" orgtype="text" style="text-align: left; width: 150px;"/> </td> <td valign="top" colspan="1" rowspan="1" style="border-left-color: rgb(221, 221, 221); border-top-color: rgb(221, 221, 221); word-break: break-all;"> PMI用户名<br/> </td> <td valign="top" colspan="1" rowspan="1" style="border-left-color: rgb(221, 221, 221); border-top-color: rgb(221, 221, 221);"> <input name="PMIUname" type="text" title="PMIUname" value="" leipiplugins="text" orghide="0" orgalign="left" orgwidth="150" orgtype="text" style="text-align: left; width: 150px;"/> </td> </tr> <tr> <td valign="top" colspan="1" rowspan="1" style="word-break: break-all;"> PMI密码<br/> </td> <td valign="top" colspan="1" rowspan="1"> <input name="PMIUpass" type="password" title="PMIUpass" value="" leipiplugins="text" orghide="0" orgalign="left" orgwidth="150" orgtype="text" style="text-align: left; width: 150px;"/> </td> <td valign="top" colspan="1" rowspan="1" style="word-break: break-all;"> PMI ID<br/> </td> <td valign="top" colspan="1" rowspan="1" style="word-break: break-all;"> <input name="PMIID" type="text" title="PMIID" value="" leipiplugins="text" orghide="0" orgalign="left" orgwidth="150" orgtype="text" style="text-align: left; width: 150px;"/> </td> </tr> <tr> <td valign="top" colspan="1" rowspan="1" style="word-break: break-all;"> 有效期开始<br/> </td> <td valign="top" colspan="1" rowspan="1"> <input name="PMItimeB" type="text" placeholder="2020-11-21" title="PMItimeB" value="" leipiplugins="text" orghide="0" orgalign="left" orgwidth="150" orgtype="text" style="text-align: left; width: 150px;"/> </td> <td valign="top" colspan="1" rowspan="1" style="word-break: break-all;"> 有效期结束 </td> <td valign="top" colspan="1" rowspan="1"> <input name="PMItimeE" type="text" placeholder="2021-11-21" title="PMItimeE" value="" leipiplugins="text" orghide="0" orgalign="left" orgwidth="150" orgtype="text" style="text-align: left; width: 150px;"/> </td> </tr> <tr> <td valign="top" colspan="1" rowspan="1" style="word-break: break-all;"> 考点(多个以/分割) </td> <td valign="top" colspan="3" rowspan="1" style="word-break: break-all;"> <input name="Kaodian" type="text" placeholder="昆明/南宁/成都" title="Kaodian" value="" leipiplugins="text" orghide="0" orgalign="left" orgwidth="300" orgtype="text" style="text-align: left; width: 300px;" orgfontsize="" orgheight=""/> </td> </tr> <tr> <td valign="middle" colspan="4" rowspan="1" style="word-break: break-all;" align="center"><button type="button" id="chinapmpFormSubmit">提交</button></td> </tr> </tbody> </table></form>`); for(let inputName in chinapmpForm){ $('#chinapmpForm').find('[name="'+inputName+'"]').val(chinapmpForm[inputName]); } $('#chinapmpFormSubmit').click(function () { let formList = $('#chinapmpForm').serializeArray(); formList.forEach(function (kvObj) { chinapmpForm[kvObj.name] = kvObj.value; }); GM_setValue('chinapmpForm',JSON.stringify(chinapmpForm)); location.reload(); }); } function removeUserForm(){ $('#chinapmpForm').remove(); } GM_registerMenuCommand('修改配置信息',insertUserForm); GM_registerMenuCommand('关闭配置信息',removeUserForm); let chinapmpForm=GM_getValue('chinapmpForm'); if(!chinapmpForm){ chinapmpForm = {}; insertUserForm(); return; }else{ chinapmpForm = JSON.parse(chinapmpForm); } if(location.href.indexOf('/Error')>0 || location.href.indexOf('/null')>0){ if(window.sessionStorage.getItem('current_href')){ location.href = window.sessionStorage.getItem('current_href'); }else{ location.href = 'http://exam.chinapmp.cn'; } return; } window.sessionStorage.setItem('current_href',location.href); if($('head').children().length<1 || $('script').length<1){ location.reload(); return; } let recentlyTime = 0,workMap={}; $.ajaxSetup({ beforeSend:function(XMLHttpRequest){ recentlyTime = new Date().getTime(); } }); function overtimeReloadPage(work,duration){ if(workMap[work]>3 && recentlyTime>0 && new Date().getTime()-recentlyTime>duration*2){ location.reload(); } workMap[work] = workMap[work]?workMap[work]+1:1; } if(location.href.indexOf('exam.chinapmp.cn')>0){ if($('head').children().length<1){ location.reload(); return; } if($('#uLogin').length<1){ let rei = window.sessionStorage.getItem('redirect_examsign_info'); if(rei === 'true' || rei !=='false' && confirm('是否确认跳转到报考页面?')){ location.href = 'http://user.chinapmp.cn/examsign;info.shtml'; window.sessionStorage.setItem('redirect_examsign_info','true'); }else{ window.sessionStorage.setItem('redirect_examsign_info','false'); } return; } //修改: 用户名(国际人才交流基金会官网) $('#Login_uName').val(chinapmpForm['Login_uName']); //修改: 密码(国际人才交流基金会官网) $('#Login_uPass').val(chinapmpForm['Login_uPass']); window.setInterval(()=>{ overtimeReloadPage('uLogin',5000); $('#uLogin').click(); console.log('重试登录!'); window.alert = function(str) { return; } },5000); const interId = window.setInterval(()=>{ console.log('重试加载核心js组件!'); jQuery.getScript("http://exam.chinapmp.cn/App_Ajax/ajaxscript;SHOW.Ajax.Exam.Login,SHOW.Ajax;.ajax?from=http%3a%2f%2fuser.chinapmp.cn%2fexamsign%3binfo.shtml&domain=exam", function(){ clearInterval(interId); }); },5000); }else if(location.href.indexOf('user.chinapmp.cn/index.shtml')>0){ //登录成功 let rei = window.sessionStorage.getItem('redirect_examsign_info'); if(rei === 'true' || rei !=='false' && confirm('是否确认跳转到报考页面?')){ location.href = 'http://user.chinapmp.cn/examsign;info.shtml'; window.sessionStorage.setItem('redirect_examsign_info','true'); }else{ window.sessionStorage.setItem('redirect_examsign_info','false'); } }else if(location.href.indexOf('user.chinapmp.cn/examsign;info.shtml')>0){ //疫情告知书 if($('head').children().length<1){ location.reload(); return; } $('input[value*="确认个人信息无误,下一步"]').one('click',function(){ GM_setValue('auto_click',true); window.setInterval(()=>{ overtimeReloadPage('noError',5000); $('input[value*="确认个人信息无误,下一步"]').click(); console.log('重试确认信息无误!'); window.alert = function(str) { return; } },5000); }); //第二次自动确认个人信息无误,下一步 if(GM_getValue('auto_click') === 'true'){ $('input[value*="确认个人信息无误,下一步"]').click(); } let examsignLoad=false; const examsignInter = window.setInterval(()=>{ console.log('重试加载核心js组件!'); jQuery.getScript("http://user.chinapmp.cn/user/script/examsign.js?v=202008102151", function(){ if(examsignLoad)return; examsignLoad = true; window.clearInterval(examsignInter); window.alert = function(str) { return; } let numRegex = /\d+/g; setTimeout(()=>{ numRegex.lastIndex = 0; if(!numRegex.test($('#clause_yes').text())){ location.reload(); }else{ const clauseYesInter = window.setInterval(()=>{ numRegex.lastIndex = 0; if(!numRegex.test($('#clause_yes').text())){ overtimeReloadPage('clause_yes',1000); $('#clause_yes').click(); window.clearInterval(clauseYesInter); } },1000); } },1000); }); },5000); } else if(location.href.indexOf('user.chinapmp.cn/examsign;sign.shtml')>0){ if($('head').children().length<1 || $('#Xing').length<1){ location.reload(); return; } //自动填充内容 $('input[type="radio"][value="101"]').click(); //修改: 姓 $('#Xing').val(chinapmpForm['Xing']); //修改: 名 $('#Ming').val(chinapmpForm['Ming']); //修改: 培训机构名称 let peixun = $('#Peixunjigou').find('option:contains("' + chinapmpForm['Peixunjigou'] +'")'); $('#Peixunjigou').val(peixun.attr('value')); //修改: 用户名(PMI官网) $('#PMIUname').val(chinapmpForm['PMIUname']); //修改: 密码(PMI官网) $('#PMIUpass').val(chinapmpForm['PMIUpass']); //修改: PMI ID(PMI官网) $('#PMIID').val(chinapmpForm['PMIID']); //修改: PMI英文有效期(开始) $('#PMItimeB').val(chinapmpForm['PMItimeB']); //修改: PMI英文有效期(结束) $('#PMItimeE').val(chinapmpForm['PMItimeE']); //修改: 考点标记颜色 let kaodian = $({}); chinapmpForm['Kaodian'].split('/').forEach(function (kd) { if(!kaodian){ kaodian = $('#Kaodian').find('option:contains("' + kd +'")').css({backgroundColor:'#90ee90'}); }else{ kaodian.add($('#Kaodian').find('option:contains("' + kd +'")').css({backgroundColor:'#90ee90'})); } }); $('#Kaodian').change(function(){ GM_setValue('prev_kaodian_selected',$(this).val()); }); if(kaodian.length>0){ //默认选中第一个 if(GM_getValue('prev_kaodian_selected')){ $('#Kaodian').val(GM_getValue('prev_kaodian_selected')); }else{ $('#Kaodian').val(kaodian.first().attr('value')); $('#Kaodian').trigger('change'); } }else{ //考点未开放,每隔一段时间刷新下页面 window.setTimeout(()=>{ location.reload(); },Math.random()*60*1000); } $('input[value="完成报名"]').one('click',function(){ window.setInterval(()=>{ overtimeReloadPage('finishApply',5000); $('input[value="完成报名"]').click(); console.log('重试完成报名!'); window.alert = function(str) { return; } },5000); }); } })();