// ==UserScript==
// @name Pikpak验证码获取工具[AAA]
// @namespace https://home.bilivo.top/
// @version 1.1
// @license MIT
// @description 配合纸鸢油猴子脚本,获取注册 pikpak 时的验证码。20241012更新:由于微软邮箱新机制,短效邮箱的登录需要搭配Oauth2协议,所以新加了 oauth2 取件接口。
// @author AAA
// @icon https://image.211678.top/file/AgACAgUAAyEGAASIgfLNAAMEZt1G7t_dD1e01O-7w-xW3MQGbUcAAqvEMRtEPPBWNntf0QmNWM4BAAMCAAN4AAM2BA
// @match *://mypikpak.com/*
// @match *://pikpak.me/*
// @match *://mypikpak.net/*
// @grant GM_xmlhttpRequest
// @grant GM_addStyle
// @downloadURL none
// ==/UserScript==
(function() {
'use strict';
GM_addStyle(`
@import url('https://unpkg.com/element-ui/lib/theme-chalk/index.css');
#toggleButton{position:fixed;top:7%;right:20px;z-index:9999;background-color:#409EFF;color:white;padding:10px 20px;border:none;border-radius:5px;cursor:pointer;font-size:16px;line-height:20px;}#formContainer{position:fixed;top:100px;right:20px;z-index:9998;background:white;padding:20px;box-shadow:0px 0px 15px rgba(0,0,0,0.1);border-radius:10px;width:300px;display:none;}.el-form-item{margin-bottom:20px;}.el-button{width:100%;padding:10px 0;}#modeSwitch{display:flex;justify-content:space-around;margin-bottom:20px;}#pop3Section,#oauth2Section{display:none;}#oauthCode{height:130px;line-height:20px;}.el-form-item {margin-bottom: 10px;}
`);
const toggleButton = document.createElement('button');
toggleButton.id = 'toggleButton';
toggleButton.innerText = '显/隐获取验证码';
document.body.appendChild(toggleButton);
const formContainer = document.createElement('div');
formContainer.id = 'formContainer';
formContainer.innerHTML = `
`;
document.body.appendChild(formContainer);
const pop3Section = document.getElementById('pop3Section');
const oauth2Section = document.getElementById('oauth2Section');
const pop3ModeBtn = document.getElementById('pop3Mode');
const oauth2ModeBtn = document.getElementById('oauth2Mode');
let currentMode = 'pop3';
pop3Section.style.display = 'block';
toggleButton.addEventListener('click', function() {
const appElement = document.getElementById('formContainer');
if (appElement.style.display === 'none' || appElement.style.display === '') {
appElement.style.display = 'block';
} else {
appElement.style.display = 'none';
}
});
pop3ModeBtn.addEventListener('click', function() {
currentMode = 'pop3';
pop3Section.style.display = 'block';
oauth2Section.style.display = 'none';
pop3ModeBtn.classList.add('el-button--primary');
oauth2ModeBtn.classList.remove('el-button--primary');
});
oauth2ModeBtn.addEventListener('click', function() {
currentMode = 'oauth2';
pop3Section.style.display = 'none';
oauth2Section.style.display = 'block';
oauth2ModeBtn.classList.add('el-button--primary');
pop3ModeBtn.classList.remove('el-button--primary');
});
const getCodeBtn = document.getElementById('getCodeBtn');
getCodeBtn.addEventListener('click', function() {
const verificationCodeInput = document.getElementById('verificationCode');
let url, requestData;
if (currentMode === 'pop3') {
const userName = document.getElementById('userName').value;
const passWord = document.getElementById('passWord').value;
if (!userName || !passWord) {
alert('请输入邮箱和POP3授权码!');
return;
}
url = 'https://ppcode.bilivo.top/get_code';
requestData = {
userName: userName,
passWord: passWord,
recipientEmail: userName
};
} else if (currentMode === 'oauth2') {
const oauthCode = document.getElementById('oauthCode').value.trim();
if (!oauthCode) {
alert('请输入oauth2形式邮箱数据!以闪邮箱提取示例:dru3wkzv6xxx@hotmail.com----UUPtTxxxx----M.C501_BAY.0.U.-Cxxxx$----8b4ba9dd-3ea5-4e5f-86f1-xxxx');
return;
}
const oauthData = oauthCode.split('----');
if (oauthData.length !== 4) {
alert('oauth2形式邮箱数据格式错误,请检查输入!');
return;
}
const [userName, passWord, refreshToken, clientId] = oauthData;
url = 'https://ppcode.bilivo.top/oauth2';
requestData = {
userName: userName,
passWord: passWord,
refreshToken: refreshToken,
clientId: clientId
};
}
getCodeBtn.innerText = '加载中...';
getCodeBtn.disabled = true;
GM_xmlhttpRequest({
method: 'POST',
url: url,
headers: {
'Content-Type': 'application/json'
},
data: JSON.stringify(requestData),
onload: function(response) {
console.log("开始获取验证码...");
if (response.status === 200) {
const data = JSON.parse(response.responseText);
if (data.code === 200) {
const verificationCode = data.verification_code;
verificationCodeInput.value = verificationCode;
navigator.clipboard.writeText(verificationCode).then(function() {
alert('验证码已自动复制到剪切板:' + verificationCode);
}, function(err) {
alert('复制验证码到剪切板失败:' + err);
});
} else {
alert('未能获取到验证码,请重试或确保信息正确!');
}
} else {
const data = JSON.parse(response.responseText);
alert(data.msg || '服务出错了...');
}
getCodeBtn.innerText = '获取验证码';
getCodeBtn.disabled = false;
},
onerror: function() {
alert('无法连接到服务器');
getCodeBtn.innerText = '获取验证码';
getCodeBtn.disabled = false;
}
});
});
})();