// ==UserScript== // @name 拒绝二维码登录 // @namespace NoQRCodeLogin // @version 2.0.2 // @description 新版12306、QQ、支付宝、淘宝、京东、百度云盘等网站默认使用账号密码登录,不出现二维码登录界面,可自定义设置在指定网站开启和关闭,有需求或问题请反馈。 // @author Eva // @match *://kyfw.12306.cn/* // @match *://login.taobao.com/* // @match *://passport.jd.com/* // @match *://*.baidu.com/* // @match *://*.douban.com/* // @match *://passport.suning.com/* // @match *://*.zhihu.com/* // @match *://*.alipay.com/* // @match *://*.qq.com/* // @match *://*.weiyun.com/* // @match *://exmail.qq.com/* // @match *://*.cloud.tencent.com/* // @match *://*.qcloud.com/* // @match *://www.iqiyi.com/* // @match *://*.xiami.com/* // @match *://*.huya.com/* // @match *://passport.58.com/* // @match *://*.tianya.cn/* // @match *://*.baixing.com/* // @match *://*.sl56.com/* // @grant unsafeWindow // @grant GM_getValue // @grant GM_setValue // @grant GM.deleteValue // @grant GM_registerMenuCommand // @require https://code.jquery.com/jquery-latest.min.js // @run-at document-end // @downloadURL none // ==/UserScript== (function () { 'use strict'; // 注册菜单 GM_registerMenuCommand("拒绝二维码登录开关设置", startSettings); var settingData = [ {'name': '12306', 'url': 'kyfw.12306.cn', 'enabled': true}, {'name': '淘宝', 'url': 'login.taobao.com', 'enabled': true}, {'name': '京东', 'url': 'passport.jd.com', 'enabled': true}, {'name': '百度', 'url': 'baidu.com', 'enabled': true}, {'name': '豆瓣', 'url': 'douban.com', 'enabled': true}, {'name': '苏宁易购', 'url': 'passport.suning.com', 'enabled': true}, {'name': '知乎', 'url': 'zhihu.com', 'enabled': true}, {'name': '支付宝', 'url': 'alipay.com', 'enabled': true}, { 'name': '腾讯QQ', 'url': ['xui.ptlogin2.qq.com', 'ssl.xui.ptlogin2.qq.com', 'ui.ptlogin2.qq.com'], 'enabled': true }, {'name': '微云', 'url': 'weiyun.com', 'enabled': true}, {'name': '腾讯云', 'url': ['cloud.tencent.com', 'qcloud.com'], 'enabled': true}, {'name': '腾讯企业邮箱', 'url': 'exmail.qq.com', 'enabled': true}, {'name': '爱奇艺', 'url': 'iqiyi.com', 'enabled': true}, {'name': '虾米音乐', 'url': 'xiami.com', 'enabled': true}, {'name': '虎牙直播', 'url': 'huya.com', 'enabled': true}, {'name': '58同城', 'url': 'passport.58.com', 'enabled': true}, {'name': '天涯社区', 'url': 'tianya.cn', 'enabled': true}, {'name': '百姓网', 'url': 'baixing.com', 'enabled': true}, {'name': '升蓝物流', 'url': 'sl56.com', 'enabled': true} ]; //更新设置 var storageData = getStorageData(); //console.log('浏览器本地数据', storageData); if (storageData) { //同步最新支持列表到本地存储的设置数据 var needUpate = false; var missingData = []; $.each(settingData, function (i, item) { var matchCount = 0; $.each(storageData, function (r, data) { if (item.name == data.name) { matchCount++; if (item.url.toString() != data.url.toString()) { console.log("变更数据", data.url, "为", item.url); data.url = item.url; needUpate = true; } } }); if (matchCount == 0) missingData.push(item) }); if (missingData.length > 0) { console.log("更新数据", missingData); $.merge(storageData, missingData); needUpate = true; } } else { //初始化浏览器本地存储的设置数据 storageData = settingData; console.log("初始化数据", storageData); needUpate = true; } if (needUpate) setStorageData(storageData); function Settings() { this.mask = $('
'); this.ele = $('
'); this.init(); } Settings.prototype = { init: function () { var self = this; self.mask.attr('id', 'settingLayerMask'); self.ele.attr('id', 'settingLayer'); self.addContent(); self.addGlobalStyle(); self.mask.append(self.ele); $('body').append(self.mask); self.mask.on('click', function () { self.hide(); }); self.ele.on('click', function (e) { self.bindClick(e); e.stopPropagation(); }); $(document).keyup(function (e) { if (e.key === "Escape") { // escape key maps to keycode `27` self.hide(); } }); }, addContent: function () { //各网站开关 var itemList = $('
'); $.each(storageData, function (i, item) { var itemDiv = $('
'); var checkDiv = $('
'); if (item.enabled) checkDiv.addClass('on') itemDiv.append($('').text(item.name)).append(checkDiv.append($('').attr('name', item.name)).append($(''))); itemList.append(itemDiv); }); //按钮(反馈、保存等) var btnEle = $('
'); //Greasyfork反馈按钮 var feedbackGreasyforkEle = $('').append($('反馈greasyfork')); //GitHub反馈按钮 var feedbackGitHubEle = $('').append($('反馈 GitHub')); //保存按钮 var saveEle = $('保存并关闭'); //关闭按钮 var closeEle = $(''); this.ele.append(itemList).append(btnEle.append($('
').append(feedbackGreasyforkEle).append(feedbackGitHubEle).append(saveEle))).append(closeEle); }, show: function () { var self = this; setTimeout(function () { self.mask.css('display', 'flex'); }, 30); }, hide: function () { var self = this; setTimeout(function () { self.mask.css('display', 'none'); }, 100); }, addGlobalStyle: function () { var globalStyle = ' /* 开关按钮 */\n' + ' #itemlist {\n' + ' display: flex;\n' + ' display: -webkit-flex;\n' + ' align-content: center;\n' + ' align-items: center;\n' + ' justify-content: center;\n' + ' flex-flow: row wrap;\n' + ' }\n' + '\n' + ' section {\n' + ' float: left;\n' + ' width: 200px;\n' + ' padding: 6px 20px;\n' + ' }\n' + '\n' + ' .switch span {\n' + ' height: 30px;\n' + ' line-height: 30px;\n' + ' font-size: 20px;\n' + ' vertical-align: top;\n' + ' }\n' + '\n' + ' .switch .checkbox {\n' + ' float: right;\n' + ' }\n' + '\n' + ' .checkbox {\n' + ' position: relative;\n' + ' display: inline-block;\n' + ' }\n' + '\n' + ' .checkbox:after,\n' + ' .checkbox:before {\n' + ' -webkit-font-feature-settings: normal;\n' + ' -moz-font-feature-settings: normal;\n' + ' font-feature-settings: normal;\n' + ' -webkit-font-kerning: auto;\n' + ' font-kerning: auto;\n' + ' -moz-font-language-override: normal;\n' + ' font-language-override: normal;\n' + ' font-stretch: normal;\n' + ' font-style: normal;\n' + ' font-synthesis: weight style;\n' + ' font-variant: normal;\n' + ' font-weight: normal;\n' + ' text-rendering: auto;\n' + ' }\n' + '\n' + ' .checkbox label {\n' + ' width: 80px;\n' + ' height: 30px;\n' + ' background: #ccc;\n' + ' position: relative;\n' + ' display: inline-block;\n' + ' border-radius: 46px;\n' + ' -webkit-transition: 0.4s;\n' + ' transition: 0.4s;\n' + ' cursor: pointer;\n' + ' }\n' + '\n' + ' .checkbox label:after {\n' + ' content: \'\';\n' + ' position: absolute;\n' + ' width: 50px;\n' + ' height: 50px;\n' + ' border-radius: 100%;\n' + ' left: 0;\n' + ' top: -5px;\n' + ' z-index: 2;\n' + ' background: #fff;\n' + ' box-shadow: 0 0 5px rgba(0, 0, 0, 0.2);\n' + ' -webkit-transition: 0.4s;\n' + ' transition: 0.4s;\n' + ' cursor: pointer;\n' + ' }\n' + '\n' + ' .checkbox input {\n' + ' display: none;\n' + ' }\n' + '\n' + ' .checkbox.on label:after {\n' + ' left: 40px;\n' + ' }\n' + '\n' + ' .checkbox.on label {\n' + ' background: #4BD865;\n' + ' }\n' + '\n' + ' .switch .checkbox label {\n' + ' width: 70px;\n' + ' }\n' + '\n' + ' .switch .checkbox label:after {\n' + ' top: 0;\n' + ' width: 30px;\n' + ' height: 30px;\n' + ' }\n' + '\n' + ' /* 弹出层 */\n' + ' #settingLayerMask {\n' + ' display: none;\n' + ' justify-content: center;\n' + ' align-items: center;\n' + ' position: fixed;\n' + ' top: 0;\n' + ' right: 0;\n' + ' bottom: 0;\n' + ' left: 0;\n' + ' background-color: rgba(0, 0, 0, .5);\n' + ' z-index: 200000000;\n' + ' overflow: auto;\n' + ' font-family: arial, sans-serif;\n' + ' min-height: 100%;\n' + ' font-size: 16px;\n' + ' transition: 0.5s;\n' + ' opacity: 1;\n' + ' user-select: none;\n' + ' -moz-user-select: none;\n' + ' padding-bottom: 80px;\n' + ' box-sizing: border-box;\n' + ' }\n' + '\n' + ' #settingLayer {\n' + ' display: flex;\n' + ' flex-wrap: wrap;\n' + ' padding: 20px;\n' + ' margin: 0px 25px 50px 5px;\n' + ' background-color: #fff;\n' + ' border-radius: 4px;\n' + ' position: absolute;\n' + ' width: 60%;\n' + ' transition: 0.5s;\n' + ' }\n' + '\n' + '\n' + ' #btnEle {\n' + ' position: absolute;\n' + ' width: 100%;\n' + ' bottom: 4px;\n' + ' right: 0;\n' + ' background: #fff;\n' + ' border-radius: 4px;\n' + ' }\n' + '\n' + ' #btnEle span {\n' + ' display: inline-block;\n' + ' background: #EFF4F8;\n' + ' border: 1px solid #3abdc1;\n' + ' margin: 12px auto 10px;\n' + ' color: #3abdc1;\n' + ' padding: 5px 10px;\n' + ' border-radius: 4px;\n' + ' cursor: pointer;\n' + ' outline: none;\n' + ' transition: 0.3s;\n' + ' }\n' + '\n' + ' #btnEle a {\n' + ' color: #999;\n' + ' text-decoration: none;\n' + ' }\n' + '\n' + ' #btnEle a:hover {\n' + ' text-decoration: underline;\n' + ' color: #ef8957;\n' + ' }\n' + '\n' + ' #btnEle span.feedback:hover {\n' + ' border-color: #ef8957;\n' + ' }\n' + '\n' + ' #btnEle span:not(.feedback):hover {\n' + ' background: #3ACBDD;\n' + ' color: #fff;\n' + ' }\n' + '\n' + ' #btnEle .feedback {\n' + ' border-color: #aaa;\n' + ' }\n' + '\n' + ' #btnEle>div {\n' + ' width: 100%;\n' + ' margin-bottom: -100%;\n' + ' display: flex;\n' + ' justify-content: space-around;\n' + ' background: #EFF4F8;\n' + ' border-radius: 4px;\n' + ' }\n' + '\n' + ' /*close button*/\n' + ' #noqrlogin-close {\n' + ' background: white;\n' + ' color: #3ABDC1;\n' + ' line-height: 20px;\n' + ' text-align: center;\n' + ' height: 20px;\n' + ' width: 20px;\n' + ' font-size: 20px;\n' + ' padding: 10px;\n' + ' border: 3px solid #3ABDC1;\n' + ' border-radius: 50%;\n' + ' transition: .5s;\n' + ' top: -20px;\n' + ' right: -20px;\n' + ' position: absolute;\n' + ' cursor: pointer;\n' + ' }\n' + '\n' + ' #noqrlogin-close::before {\n' + ' content: \'\\2716\';\n' + ' }\n' + '\n' + ' #noqrlogin-close:hover {\n' + ' background: indianred;\n' + ' border-color: indianred;\n' + ' color: #fff;\n' + ' }'; $("").text(globalStyle).appendTo($("head")); }, bindClick: function (e) { var self = this; var targetClass = e.target.className; var targetid = e.target.id; if (targetid == 'noqrlogin-close') {//关闭按钮 self.hide(); } if (targetid == 'noqrlogin-save') {//保存设置 $('section.switch input').each(function (i, o) { $.each(storageData, function (j, d) { if (d.name == o.name) d.enabled = $(o.closest('.checkbox')).hasClass('on') }) }); //console.log(storageData); setStorageData(storageData); self.hide(); } if (targetClass == 'switchLabel') {//切换开关 var switchEle = $(e.target).closest('.checkbox'); if (switchEle.hasClass('on')) { switchEle.removeClass('on'); } else { switchEle.addClass('on'); } } } }; function startSettings() { var settings = new Settings(); settings.show(); } //startSettings(); //处理业务 $.each(storageData, function (r, data) { if ($.isArray(data.url)) { $.each(data.url, function (i, u) { check(u, data.enabled) }); } else { check(data.url, data.enabled) } }); function check(url, enabled) { if (matchURL(url) && enabled) { process(url); return false; } } function process(url) { console.log("网址匹配,可切换二维码登录:", url); switch (url) { case 'kyfw.12306.cn': //12306 var auto = setInterval(function () { if ($('#J-login-code-loading').css('display') === 'none' && $('.login-hd-code').hasClass('active')) { $('.login-hd-account a')[0].click(); clearInterval(auto); } }, 50); break; case 'login.taobao.com': //淘宝 var auto = setInterval(function () { if ($('#J_StaticForm').css('display') === 'none') { $('#J_Quick2Static').click(); clearInterval(auto); } }, 50); break; case 'passport.jd.com': //京东 var auto = setInterval(function () { if ($('.login-box').css('display') === 'none') { $('.login-tab-r').click(); clearInterval(auto); } }, 50); break; case 'baidu.com': //百度 //todo optimize code var auto = setInterval(function () { var yunbtn = $('#TANGRAM__PSP_4__footerULoginBtn'); var indexBtn = $('#TANGRAM__PSP_10__footerULoginBtn'); var passportBtn = $('#TANGRAM__PSP_3__footerULoginBtn'); var tiebaBtn = $('#TANGRAM__PSP_11__footerULoginBtn'); var tiebaBtn2 = $('#TANGRAM__PSP_28__footerULoginBtn'); var wenKuBtn = $('#TANGRAM__PSP_18__footerULoginBtn'); if (yunbtn.length > 0) { yunbtn[0].click(); clearInterval(auto); } if (indexBtn.length > 0) { indexBtn[0].click(); clearInterval(auto); } if (passportBtn.length > 0) { passportBtn[0].click(); clearInterval(auto); } if (tiebaBtn.length > 0) { tiebaBtn[0].click(); clearInterval(auto); } if (tiebaBtn2.length > 0) { tiebaBtn2[0].click(); clearInterval(auto); } if (wenKuBtn.length > 0) { wenKuBtn[0].click(); clearInterval(auto); } }, 50); break; case 'douban.com': //豆瓣 var auto = setInterval(function () { if ($('.account-tab-phone').hasClass('on')) { $('.account-tab-account')[0].click(); clearInterval(auto); } }, 50); break; case 'passport.suning.com': //苏宁易购 var auto = setInterval(function () { if ($('.pc-login').css('display') === 'none') { $('.tab-item')[1].click(); clearInterval(auto); } }, 50); break; case 'zhihu.com': //知乎 var loginDiv = $('.Login-content'); var auto = setInterval(function () { if (loginDiv.length == 0) { $('.SignContainer-switch').children("span").click(); clearInterval(auto); } }, 50); break; case 'alipay.com': //支付宝 var auto = setInterval(function () { var changeTabs = $('#J-loginMethod-tabs li'); var qrCode = $('#J-qrcode'); var ssoLogin = $('#J-ssoLogin'); var loginForm = $('#J-login'); var loginFormMethod = $('#J-loginFormMethod'); var popbox = $('#J_popbox'); if (popbox.hasClass('stat-login')) { var iframe = $('#J_loginIframe'); if (iframe) { var contentWindow = iframe[0].contentWindow; if (contentWindow) { var loginMethod = contentWindow.document.getElementById('J-loginFormMethod'); if (loginMethod) { contentWindow.document.getElementById('J-qrcode-target').click(); clearInterval(auto); } } } } if (changeTabs.length >= 2) { changeTabs.each(function (index, element) { var self = $(this); if ((self.attr('data-status') === 'show_login') && (!self.hasClass("active"))) { loginFormMethod.val(''); qrCode.addClass('fn-hide'); if (window.light && window.light.page && window.light.page.products && window.light.page.products.barcode) { window.light.page.products.barcode.onready(function () { this.stop(); }); } if (ssoLogin.attr('data-hide') === 'false' && ssoLogin.attr('data-state') === 'finished') { ssoLogin.removeClass('fn-hide'); } else { loginForm.removeClass('fn-hide'); } self.addClass("active"); self.siblings().removeClass('active'); clearInterval(auto); } }); } }, 50); break; case 'xui.ptlogin2.qq.com': //腾讯QQ case 'ssl.xui.ptlogin2.qq.com': case 'ui.ptlogin2.qq.com': var auto = setInterval(function () { if ($('.onekey_logo').length == 1 || $('.face').length == 1) { $('#switcher_plogin')[0].click(); $('#switcher_qlogin').on('click', function () { clearInterval(auto); }) } }, 50); break; case 'weiyun.com': //微云 var auto = setInterval(function () { if ($('.face').length == 1 && $('#bottom_qlogin').css('display') === 'block') { $('#switcher_plogin')[0].click(); clearInterval(auto); } }, 50); break; case 'cloud.tencent.com': //腾讯云 case 'qcloud.com': var auto = setInterval(function () { if ($('.J-wxloginBox').css('display') === 'block') { $('a[data-type="email"]')[0].click(); clearInterval(auto); } }, 50); break; case 'exmail.qq.com': //腾讯企业邮箱 var auto = setInterval(function () { if ($('.login_account_pwd_panel').css('display') === 'none') { $('.js_show_pwd_panel')[0].click(); clearInterval(auto); } }, 50); break; case 'iqiyi.com': //爱奇艺 $('body').bind('DOMNodeInserted', function (e) { if($(e.target).hasClass('login-frame-bottom')){ var auto = setInterval(function () { var loginFrame = $('.login-frame[data-loginele="codeLogin"]'); if (!loginFrame.hasClass('dn')) { loginFrame.find('a[rseat="cmm_lgn"]')[0].click(); clearInterval(auto); } }, 50); } }); break; case 'xiami.com': //虾米音乐 $('.modal-wrapper').bind('DOMNodeInserted', function (e) { var auto = setInterval(function () { if ($('.modal').hasClass('opened') && !$('.login').hasClass('current')) { $('.login')[0].click(); clearInterval(auto); } }, 50); }); break; case 'huya.com': //虎牙直播 var auto = setInterval(function () { if ($('.account').hasClass('UDBSdkLgn-none')) { $("img[src$='qrweb.png']").click(); $("img[src$='webqr.png']").on('click', function () { clearInterval(auto); }) } }, 50); break; case 'passport.58.com': //58同城 var auto = setInterval(function () { if ($('#scanCode').hasClass('hide')) { $('#pwdLogin').click(); clearInterval(auto); } }, 50); break; case 'tianya.cn': //天涯社区 var process = function(){ var auto = setInterval(function () { if ($('#loginWin_content_wrapper').hasClass('loginWin-qrcode-login-wrapper')) { $('.loginWin-tab .normal-login-tab')[0].click(); clearInterval(auto); } }, 50); } if($('#loginWin_content_wrapper').length ==1){ process(); } $('#js_login').on('click',function(){ process(); }) break; case 'baixing.com': //百姓网 var auto = setInterval(function () { if ($('.login-window a[href="#appLogin"]').closest('li').hasClass('active')) { $('.login-window a[href="#mobile"]')[0].click(); clearInterval(auto); } }, 50); break; case 'sl56.com': //升蓝物流 var auto = setInterval(function () { if ($('#password').css('display') === 'none') { $('#btnPassword').click(); clearInterval(auto); } }, 50); break; } } function getStorageData() { return GM_getValue('NoQRCodeLoginData'); } function setStorageData(value) { return GM_setValue('NoQRCodeLoginData', value); } function deleteStorageData() { GM.deleteValue("NoQRCodeLoginData"); } //判断网址 function matchURL(x) { return window.location.href.indexOf(x) != -1; } })();