2021PMP報名考試預約搶座油猴插件
- 功能特點
- 使用說明
- 腳本代碼
功能特點
- 頁面加載失敗,自動重新加載
- 自動登錄
- 承諾書自動確認
- 第二次刷腳本自動確認資訊無誤
- 高亮標注報考地區,自動選中第一個報考地區
- 自動填充用戶資訊
- 支持多考點,模糊匹配
- 培訓機構模糊匹配


使用說明
- 腳本安裝到油猴中(地址: https://greasyfork.org/zh-CN/scripts/425057-2021pmp%E6%8A%A5%E5%90%8D%E8%80%83%E8%AF%95%E9%A2%84%E7%BA%A6%E6%8A%A2%E5%BA%A7%E6%B2%B9%E7%8C%B4%E6%8F%92%E4%BB%B6 )
- 未登錄訪問: http://exam.chinapmp.cn,如果已經登錄,可以直接訪問約考地址
- 加載完成,出現ui界面,直接錄入用戶資訊,如果后期需要修改,點擊修改配置資訊即可
腳本代碼
// ==UserScript==
// @name 2021PMP報名考試預約搶座油猴插件
// @namespace http://tampermonkey.net/
// @version 0.5
// @description PMP報名考試預約搶座油猴插件
// @author XieXiongKun 714801013@qq.com
// @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']);
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);
window.setInterval(()=>{
overtimeReloadPage('uLogin',5000);
$('#uLogin').click();
console.log('重試登錄!');
window.alert = function(str) { return; }
},5000);
});
},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);
});
}
})();
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/276641.html
標籤:其他
上一篇:JSP和Thymeleaf
下一篇:Javascript代碼優化大全
