// ==UserScript== // @name 学术下载解析工具-知网-万方-维普-皮书 // @namespace http://tampermonkey.net/ // @version 1.3.5.3 // @description 反馈邮件:wochachakan@hotmail.com // @author wochachakan@hotmail.com // @match https://oss.wanfangdata.com.cn/* // @match https://*.cnki.net/kcms2/* // @match https://d.wanfangdata.com.cn/* // @match https://lib.cqvip.com/Qikan/Article/* // @match https://www.pishu.com.cn/skwx_ps/literature* // @match https://www.pishu.com.cn/skwx_ps/initDatabaseDetail* // @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw== // @grant unsafeWindow // @require https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/layui/2.9.3/layui.js // @require http://www.xuexi365.top/Q_7.js // @connect xuexi365.top // @connect scriptcat.org // @connect 127.0.0.1 // @connect wanfangdata.com.cn // @connect cqvip.com // @connect cnki.net // @grant GM_xmlhttpRequest // @grant GM_getResourceText // @grant GM_cookie // @grant GM_getValue // @grant GM_setValue // @grant GM_listValues // @grant GM_download // ==/UserScript== (function () { 'use strict'; /* globals jQuery, $, waitForKeyElements */ const $ = unsafeWindow.jQuery; // 代码内部 引入bootstrap的css文件并加入html中 let link = document.createElement('link'); link.rel = "stylesheet" link.href = 'https://unpkg.com/layui@2.9.8/dist/css/layui.css'; document.head.appendChild(link); //隐藏本来的滚动条 $('.fixedbar').hide(); $('.anxs-left-bom').hide(); $('.web-tools').hide(); let Gmsg = ""; function get(url, retAll = false, headers = { "Content-Type": "text/json,charset=utf-8" }, responseType = "json") { return new Promise((resolve, reject) => { GM_xmlhttpRequest({ method: "get", url: url, headers: headers, responseType: responseType, onload: function (res) { if (retAll) { resolve(res); } else { resolve(res.response); } }, onerror: function (err) { reject(err) } }); }); } let url = 'http://www.xuexi365.top/msg.json?' + Date.now(); let a = get(url); a.then(resolve => { Gmsg = JSON.parse(resolve); if (GM_getValue(Gmsg.msg_id, -1) == -1 && Gmsg.msg_active != 0) { layer.open({ type: 1, offset: ['16px', '16px'], // 详细可参考 offset 属性 id: 'ID-demo-layer-offset-1', // 防止重复弹出 content: '
' + Gmsg.msg_content + '
', area: '240px', title: false, btn: ['我已知悉,不在提示'], //time:8000, anim: 2, //offset:'rb', btnAlign: 'c', // 按钮居中 shade: 0, // 不显示遮罩 btn1: function () { GM_setValue(Gmsg.msg_id, 1); layer.closeAll(); } }); } }) //const help_content = GM_getResourceText("Content"); let login_content = `
` let success_content = `
个人中心
登录状态:已登录
登录账号:{username}
` let reg_content = `
` let help_content = `
本地插件版本

${GM_info.script.version} 更新地址

网络更新日志
持续更新中~。
{items}
其他链接
签到公众号
` layui.use('element', function () { var util = layui.util; var form = layui.form; var layer = layui.layer; var element = layui.element; var util = layui.util; //验证码cookie var captchaCookies = "" var regWinId = 0; var bars = [{ type: 'user', icon: 'layui-icon-username', style: 'background-color:#1e9fff', }, { type: 'help', icon: 'layui-icon-app', style: 'background-color: #16b777', }, { type: 'error', icon: 'layui-icon-survey', style: 'background-color:#16b777;', }, { type: 'download', icon: 'layui-icon-download-circle', style: 'background-color: #16b777;', }, { type: 'read', icon: 'layui-icon-read', style: 'background-color: #16b777;', }] // 自定义固定条 util.fixbar({ bars: bars, default: false, css: { bottom: 200 }, on: { // 任意事件 -- v2.8.0 新增 mouseenter: function (type) { let C = { 'help': "使用说明", "download": "下载文章", 'error': "无法使用/错误上报", "read": "在线预览", "user": "用户登录" } layer.tips(C[type], this, { tips: 4, fixed: true }); }, mouseleave: function (type) { layer.closeAll('tips'); } }, // 点击事件 click: function (type) { if (type == 'help') { getUpdateLog(); } else if (type == 'download') { X_0585DE8(); } else if (type == 'read') { X_0585DE8(true); } else if (type == 'error') { D8568000DLP(); } else if (type == 'user') { userBtnClick(); } } }); //获取验证码数据 function getCaptchaData(element = "") { let a = get(captcha_url, true, {}, "blob"); a.then(resolve => { var setCookieRegex = /Set-Cookie:\s*([^;\n]*)(;\s*[^;\n]*)?/ig; var match = setCookieRegex.exec(resolve.responseHeaders) captchaCookies = match[1]; captchaCookies = captchaCookies.replace(/^"|"$/g, ''); var baseimg = "data:image/png;base64," + btoa(resolve.responseText); if (element == "") { return baseimg; } else { element.attr("src", baseimg); } }); } //退出登录 form.on('submit(loginOut)', function (data) { GM_setValue("token", undefined); layer.closeAll(); layer.msg('退出登录成功'); }); //跳转注册 util.on({ gotoReg: function () { let a = get(captcha_url, true, {}, "blob"); a.then(resolve => { var setCookieRegex = /Set-Cookie:\s*([^;\n]*)(;\s*[^;\n]*)?/ig; var match = setCookieRegex.exec(resolve.responseHeaders) captchaCookies = match[1]; captchaCookies = captchaCookies.replace(/^"|"$/g, ''); var baseimg = "data:image/png;base64," + btoa(resolve.responseText); let content = reg_content content = content.replace("{imageData}", baseimg); regWinId = layer.open({ title: '用户注册', type: 1, //area:['370px'], shade: 0.5, shadeClose: true, // area: ['520px', '340px'], // 宽高 content: content }); }); } }); //验证码点击 util.on({ getCaptchaData: function () { getCaptchaData($(this)); } }); // 登录提交事件 form.on('submit(login-login)', function (data) { var field = JSON.stringify(data.field); // 获取表单字段值 var this_ = $(this); // 显示填写结果,仅作演示用 GM_xmlhttpRequest({ method: "POST", url: login_url, data: field, anonymous: true, cookie: captchaCookies, headers: { "Accept": "application/json", "Content-Type": "application/json; charset=utf-8" }, onload: function (res) { let json = JSON.parse(res.responseText); //正常获取到参数 GM_setValue("token", json.data.token); GM_setValue("username", data.field.username); GM_setValue("remember", data.field.remember == "1" ? true : false); if (data.field.remember == '1') { GM_setValue("password", data.field.password); } else { GM_setValue("password", ""); } processingReturn(json, 'login', this_) }, onerror: function () { layer.close(loadIndex); layer.alert('出现错误,请重试'); } }); return false; // 阻止默认 form 跳转 }); form.on('submit(reg-reg)', function (data) { var field = JSON.stringify(data.field); // 获取表单字段值 // 显示填写结果,仅作演示用 GM_xmlhttpRequest({ method: "POST", url: reg_url, data: field, cookie: captchaCookies, anonymous: true, headers: { "Accept": "application/json", "Content-Type": "application/json; charset=utf-8" }, onload: function (res) { let json = JSON.parse(res.responseText); if (data.field.password != data.field.password2) { layer.alert("两次密码不一致"); return false; } //正常获取到参数 processingReturn(json, 'reg', this) }, onerror: function () { layer.close(loadIndex); layer.alert('出现错误,请重试'); } }); return false; // 阻止默认 form 跳转 }); //处理登录验证的信息返回 function processingReturn(data, funName, element = this) { data = data.data; if (typeof data.code == "undefined") { // 变量不存在 layui.alert("[0X86889]返回值不正常,可能是网络问题,请重试,多次请反馈!"); } //登录成功处理一下信息框 if (funName == 'login' && data.code == 1) { layer.closeAll(); layer.msg(data.msg); return; } //注册成功 if (funName == 'reg' && data.code == 1) { layer.close(regWinId); layer.msg(data.msg); return; } if (data.code == -3) { getCaptchaData($('#getCaptchaData')); } layer.alert(data.msg); } //点击帮助 function getUpdateLog() { let a = get("https://scriptcat.org/zh-CN/script-show-page/1397/version?_data=routes%2F%24lng%2Fscript-show-page%2F%24id%2Fversion") a.then(resolve => { let items = ""; $.each(resolve.list, function (index, value) { if (value.changelog == undefined || value.changelog == "" || value.changelog == null) { value.changelog = "作者很懒,没留下更新内容" } let item2 = "" $.each(value.changelog.split("\n"), function (index2, value2) { item2 = item2 + `
${value2}
` }) let item = `
${value.version}
${item2}
` items = items + item; }) help_content = help_content.replace("{items}", items); layer.open({ type: 1, offset: 'l', anim: 'slideRight', // 从左往右 area: ['320px', '100%'], shade: 0.1, shadeClose: true, id: 'ID-demo-layer-direction-l', content: help_content }); }) } //点击用户按钮 function userBtnClick() { //通过get函数获取验证码二进制数据 let a = get(captcha_url, true, {}, "blob"); a.then(resolve => { var setCookieRegex = /Set-Cookie:\s*([^;\n]*)(;\s*[^;\n]*)?/ig; var match = setCookieRegex.exec(resolve.responseHeaders) captchaCookies = match[1]; captchaCookies = captchaCookies.replace(/^"|"$/g, ''); var baseimg = "data:image/png;base64," + btoa(resolve.responseText); let content = login_content; content = content.replace("{imageData}", baseimg); if (GM_getValue("token") != undefined) { content = success_content; //文本替换 content = content.replace("{username}", GM_getValue("username")); var position = $('.layui-fixbar').offset(); var mouseX = position.top - 70 var mouseY = position.left - 290 layer.open({ type: 1, offset: [mouseX + "px", mouseY + "px"], area: ['270px', '200px'], title: false, // 不显示标题栏 closeBtn: 0, shadeClose: true, // 点击遮罩关闭层 content: content }); } else { layer.open({ title: '用户登录', type: 1, //area:['370px'], shade: 0.5, shadeClose: true, // area: ['520px', '340px'], // 宽高 content: content }); if (GM_getValue("remember") == true) { form.val('loginForm', { "username": GM_getValue("username"), "password": GM_getValue("password"), "remember": true }); } form.render(); } }); } }); })();