您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Remove verify code, login requirement, counting down... and more!
// ==UserScript== // @grant unsafeWindow // @grant GM_xmlhttpRequest // @run-at document-start // @name Bypass Wait, Code, & Login For Chrome // @copyright 2012+, Yulei, Chrome Compatibility by Jixun. /// 骑牛 CDN // @require http://cdn.staticfile.org/jquery/2.1.1-beta1/jquery.min.js //// Based on [Crack Url Wait Code Login] By Yulei // @author jixun66 // @namespace http://jixun.org/ // @description Remove verify code, login requirement, counting down... and more! // @version 0.6.3.21 // @create 2012-01-26 // @lastmodified 2014.06.11 //// 网盘域名匹配 /// 国内一些「网赚」网盘,体验很差 orz // @include http://gxdisk.com/* // @include http://*.gxdisk.com/* // @include http://www.azpan.com/* // @include http://*.dxrr.com/* // @include http://*.87pan.com/* // @include http://www.nyhx.com/* // @include http://down.nyhx.com/* // @include http://yimuhe.com/* // @include http://*.yimuhe.com/* // @include http://www.79pan.com/* // @include http://*.sudupan.com/* // @include http://sudupan.com/* // @include http://www.colafile.com/* // @include http://dl.vmall.com/* // @include http://dl.dbank.com/* // @include http://d.119g.com/* // @include http://www.lepan.cc/* // @include http://*.lepan.cc/* // @include http://*.qjwm.com/* // @include http://*.7958.com/* // @include http://www.2kuai.com/* // @include http://*.32666.com/* // @include http://*.9pan.net/* // @include http://9pan.net/* /// 百度 // @include http://pan.baidu.com/share/link* // @include http://pan.baidu.com/s/* // @include http://yun.baidu.com/share/link* // @include http://yun.baidu.com/s/* /// it168 整个站就一个下载地址 .. // @include http://down.it168.com/* /// 飞速盘 // @include http://*.rayfile.com/*/files/* // @include http://rayfile.com/*/files/* /// 威盘 // @include http://www.vdisk.cn/down/index/* /// 城通系列 // @include http://www.pipipan.com/* // @include http://www.ctdisk.com/* // @include http://www.400gb.com/* // @include http://www.bego.cc/* /// 好 // @include http://www.howfile.com/* // @include http://howfile.com/* // 快盘 // @include http://www.kuaipan.cn/* // 音乐放这边 >.> // @include http://jing.fm/* // @include http://5sing.com/* // @include http://*.5sing.com/* // @include http://oyinyue.com/* // @include http://*.oyinyue.com/* // @include http://duole.com/* // @include http://www.duole.com/* // @include http://douban.fm/* // @include http://moe.fm/* // SongTaste // @include http://songtaste.com/song/* // @include http://songtaste.com/album/* // @include http://songtaste.com/playmusic.php* // @include http://*.songtaste.com/song/* // @include http://*.songtaste.com/album/* // @include http://*.songtaste.com/playmusic.php* // 虾米音乐 // @include http://xiami.com/song/play // @include http://www.xiami.com/song/play // 565656 // @include http://www.565656.com/plus/player.ashx* // 9ku // @include http://www.9ku.com/play/* // 人人电台 // @include http://kxt.fm/* // @include http://fm.renren.com/* // 腾讯电台 // @include http://fm.qq.com/* // 音悦台 // @include http://yinyuetai.com/video/* // @include http://yinyuetai.com/playlist/* // @include http://v.yinyuetai.com/video/* // @include http://v.yinyuetai.com/playlist/* // @include http://www.yinyuetai.com/video/* // @include http://www.yinyuetai.com/playlist/* /// 国外访问不能, 注释掉 //\\ @include /\/\/([a-z0-9-]+\.|)1ting\.com\// //\\ @exclude /\/\/([a-z0-9-]+\.|)1ting\.com\/lrc/ // ==/UserScript== /* jshint ignore:start */ /** * Get the flash var in Object format. * @param {DOMElement} a Raw object element. * @return {Object} flashvars */ function getFlashVars (ele) { // jQuery element fix. if (!ele) return {}; if (ele.jquery) ele = ele[0]; // Check if is a flash object if (ele.type.indexOf('flash') == -1) return {}; for(var flashObject, flashVars = {}, i = ele.childNodes.length; i--;) if (ele.childNodes[i].name == 'flashvars') { flashObject = ele.childNodes[i]; break; } if (flashObject) { flashObject.value.replace(/&/g, '&').replace(/([sS]+?)=([sS]+?)(&|$)/g, function (n, key, value) { // 利用正则的批量替换功能抓取数据 ^^ flashVars [key] = decodeURIComponent(value); }); } return flashVars; } function classHook (target, callback, that) { // Bind init. arguments. for (var i=3, args=[that || {}]; i<arguments.length; i++) args.push (arguments[i]); return (function () { for (var i = 0, eArgs = args.slice(); i < arguments.length; i++) eArgs.push (arguments[i]); // When this is initialised, callback. var r = new (Function.prototype.bind.apply (target, eArgs)); // If nothing returned, use the original data instead. return callback (r, eArgs) || r; }); }; function getFirstKey (obj) { return Object.keys(obj)[0]; } function getFirstValue (obj) { try { return obj[getFirstKey(obj)]; } catch (e) { return null; } } function mapArray (arr) { for (var i = 1, ret = {}; i < arguments.length; i++) ret[arguments[i]] = arr[i]; return ret; }; // 验证码绑定; 用法演示 (不绑定自定义回调): // codeKeyBind('input#code', 4, 'button#check') function codeKeyBind (inputBox, codeLen, btnTarget, callback) { $(inputBox).on('keyup', function (e) { if (codeLen == this.value.length && (!callback || callback(this.value, codeLen))) { $(btnTarget).click(); } }); } // 清 Cookie function clearCookie () { var timeExpire = (new Date(0)).toGMTString(); var cookies = document.cookie.split(";"), tmpCookieExchange; if (cookies) { for (var thisCookie in cookies) { tmpCookieExchange = thisCookie.split('=')[0]; [ '', tmpCookieExchange + '=; expires=' + timeExpire + '; path=/; domain=' + document.domain, tmpCookieExchange + '=; expires=' + timeExpire + '; path=/; domain=.' + document.domain, tmpCookieExchange + '=; expires=' + timeExpire + '; domain=.' + document.domain, tmpCookieExchange + '=; expires=' + timeExpire + '; domain=' + document.domain, tmpCookieExchange + '=; expires=' + timeExpire + '; path=/', tmpCookieExchange + '=; expires=' + timeExpire ].forEach (function (setCookie) { document.cookie = setCookie; }); } } } String.prototype.beginWith = function (what) { return this.indexOf (what) + 1; }; function getUrlParam (rawUrl) { var ret = {}, rawParams = rawUrl.substr(rawUrl.indexOf("?") + 1); if (rawParams) var c = rawParams.split("&"); for (var i = 0; i < c.length; i++) { var queryStr = c[i].toString(), posEqual = queryStr.indexOf("="); ret[decodeURIComponent(queryStr.substr(0, posEqual))] = decodeURIComponent(queryStr.substr(posEqual + 1)); } return ret; } /* jshint ignore:end */ (function () { 'use strict'; var us = (typeof (unsafeWindow) != "undefined"), win = unsafeWindow; win.antiads = 0; win.CNZZ_AD_BATCH = tFunc; /* * jPrintf: 自写函数,参考: * http://jixun.org/1656- * * $_GET: 自写全局变量, 模拟 php 端的 $_GET 变量。参考: * http://jixun.org/1774- */ var d = document, l = location, lurl = l.href, gPathway = '', body = $('body')[0], numKeys = [1, 2, 3, 4, 5, 6, 7, 8, 9, 'C', '0', '←'], ubA = function (e) { e.outerHTML = e.outerHTML; }, cE = function (e) { return d.createElement(e); }, bugRepUrl = 'https://greatest.deepsurf.us/forum/post/discussion?Discussion/ScriptID=125', log = function (a1) { console.log((arguments.length > 1) ? arguments : a1); }, dhost = l.host.match(/\w+\.\w+$/)[0].toLowerCase(), jprintf = function () { var arg = arguments, len = arg.length - 1, inp = arg[0]; if (len < 1) { return; } // 无效或无参数 for (var i=len; i>0; i--) inp = inp.replace (new RegExp('(\\$|%)'+i,'g'), arg[i]); return inp; }, $_GET = getUrlParam (lurl); var wordpressAudio = function () { log('WordPress Audio 插件通用代码 启动'); var fixEmbed = function (obj) { if (obj.hasAttribute('CUWCL4C')) return; console.log ('fixEmbed: ', obj); $('<a>').html('下载音频<br>') .attr ({ href: Base64.decode(getFlashVars(obj).soundFile), target: '_blank' }).insertBefore (obj); obj.setAttribute ('CUWCL4C', '^^'); }; new MutationObserver (function (eve) { for (var i=0; i<eve.length; i++) if (eve[i].target.className == 'audioplayer_container' && eve[i].addedNodes.length) fixEmbed(eve[i].addedNodes[0]); }).observe ($('.post > .entry')[0], { childList: true, subtree: true }); // Firefox fix.. = = $('object[id^="audioplayer_"]').each(function () { fixEmbed(this); }); log('WordPress Audio 插件通用代码 结束'); }, parseHTML = function (responseText) { // For Firefox var ret = (new DOMParser()).parseFromString(responseText, "text/html"); // For Chrome if (ret === undefined) { ret = document.implementation.createHTMLDocument(""); ret.querySelector('html').innerHTML = responseText; } return ret; }, waitUnTil = function (ver4Check, func, replaceVar) { var timer = setInterval(function () { if (typeof (ver4Check) == 'function') { try { if (!ver4Check()) return; } catch (e) { // Not ready yet. return ; } } else if (typeof (win[ver4Check]) == 'undefined') { return; } clearInterval(timer); if (replaceVar && typeof (win[ver4Check]) == 'function') { log('Function [ ' + ver4Check + ' ] Hooked.'); win[ver4Check] = replaceVar; } if (typeof (func) == 'function') func(); }, 150); setTimeout (function () { // Timeout clearInterval(timer); }, 4500); }, makeCpfCss = function (name, param) { var ret = {}; ret[name] = param; ['o','ms','moz','webkit'].forEach (function (e) { ret['-' + e + '-' + name] = param; }); return ret; }, safeJump = function (sTargetUrl) { d.title = '正在跳转…'; log('safeJump :: ' + sTargetUrl); if (!sTargetUrl) return false; return reDirWithRef(sTargetUrl); }, makeDelayCss = function (sVar) { var sP = sVar || 'all .2s'; return makeCpfCss('transition', sP); }, makeRotateCss = function (deg) { return makeCpfCss('transform', 'rotate(' + deg + 'deg)'); }, createNumPad = function (maxLen, targetInput, finishCallback, codeResetCallback) { if (!codeResetCallback) codeResetCallback = eFunc; var table = cE('table'), rcde = $(targetInput)[0]; $(table).css({ 'background-color': '#ffcc99', 'position': 'relative', 'bottom': '164px', 'left': '170px' }); for (var i = 0; i < 4; i++) { var tr = cE('tr'); for (var j = 0; j < 3; j++) { var td = cE('td'); td.innerHTML = $(td).attr('k', numKeys[i * 3 + j]).attr('k'); tr.appendChild(td); } table.appendChild(tr); } $(table).find('td').click(function () { var val = rcde.value, len = val.length, key = $(this).attr('k') || ''; $(rcde).focus(); switch (key) { case '←': rcde.value = val.sub(1); break; case 'C': rcde.value = ''; break; default: rcde.value += key; len ++; if (len >= maxLen) { if (finishCallback(rcde.value)) { $(table).hide(); } else { codeResetCallback(); rcde.value = ''; } } break; } }).css({ font: 'bold 25px Tahoma', color: 'red', cursor: 'pointer', verticalAlign: ' middle', textAlign: ' center', border: '1px solid #DDDDDD', padding: '6px', width: '40px', height: '40px' }); return table; }; log('脚本开始执行。'); lurl = lurl.substr(0, (lurl + '#').indexOf('#')); // 过滤 # 后面的内容 log(['调试信息如下:', dhost, lurl, $_GET]); log('脚本版本 [ ' + GM_info.script.version + ' ] , 如果发现脚本问题请提交到 [ ' + bugRepUrl + ' ] 谢谢。'); // 文本类扩展 :: 删除文本后方指定位数 String.prototype.sub = function (n) { return this.substr(0, this.length - n); }; // 空白函数, 适合腾空页面函数。 var eFunc = function () {}, tFunc = function () { return !0; }, fFunc = function () { return !1; }, // 带有引用页的跳转 reDirWithRef = function (targetUrl) { if (!targetUrl) return ; var GET = getUrlParam(targetUrl), form = $('<form>') .attr('action', targetUrl.replace(/\?.*$/, '')) .text('正在跳转: ' + targetUrl).prependTo(document.body) .css ({fontSize: 12}); for (var g in GET) form.append($('<input>').attr({ name: g, type: 'hidden' }).val(GET[g])); form.submit(); return 1; }, // 网盘地址自动导向 [基于 phpDisk 的网盘] chkDU = function (funcCallback){ var chk = /\/(file)?(file|view)([\/.\-_].*)/; // Because location.xx = xx does not pass the refer, so we're going to make a dummy form. var bPassTest = chk.test (l.href); return bPassTest ? (funcCallback || reDirWithRef)(l.href.replace (chk, '/$1down$3')) : false; }, // 插入样式表 injStyle = function (s) { var st = cE('style'); st.innerHTML = s; d.body.appendChild(st); return st; }, // 强制隐藏/显示某些元素 forceHide = function (what){ injStyle(what + ' { display: none !important }'); }, forceShow = function (what){ injStyle(what + ' { display: block !important }'); }, // 强制隐藏框架 forceHideFrames = function (){ forceHide('iframe, frameset, frame');}, // 移除站外链接 clearOutsiteLink = function () { $('a').not('[href*="' + dhost + '/"],[href*="#"],[href^="j"],[href^="/"]').remove(); }, // 通用 jPlayer 注入 jPlayerPatcher = function (callback, namespace) { // 默认为 jPlayer if (!namespace) namespace = 'jPlayer'; log ('[-] Waiting for jPlayer to load...'); waitUnTil(function () { return win.$[namespace].prototype.setMedia; }, function () { log ('[*] Backup old function...'); var oldSetMedia = win.$[namespace].prototype.setMedia; log ('[*] Hook start!'); win.$[namespace].prototype.setMedia = function (newMedia) { console.log (newMedia); callback(newMedia); return oldSetMedia.apply(this, arguments); }; log ('[+] Hook finish, enjoy~'); }); }; log('域名判断: ' + dhost); // HOOK STAGE 1 var continueScript = false; switch (l.hostname.toLowerCase()) { case 'yun.baidu.com': case 'pan.baidu.com': // 因为度娘知道自己的所谓云管家不能在非 Windows 下运行 // 因此识别器更改为非 Win32 即可绕过云管家提示。 win.navigator.__defineGetter__ ('platform', function () {return 'Cracked by Jixun ^^';}); break; case 'down.nyhx.com': // 屏蔽弹窗 win.open = tFunc; continueScript = true; break; default: continueScript = true; } if (!continueScript) return; /* continueScript = false; switch (dhost) { default: continueScript = true; } if (!continueScript) return; */ // DOMContentLoaded $(function () { log('进入 DOMContentLoaded 事件。'); setTimeout(function () { // 域名判断开始 var continueScript = false; switch (l.hostname.toLowerCase()) { default: continueScript = true; } if (!continueScript) return; switch (dhost) { case "5sing.com": if (l.href.toLowerCase().indexOf("down/") > 0) { var $dl = $('<p>').prependTo ($('.sing_view')).text('正在解析音乐地址…'); $.get('/' + l.pathname.match(/\d+/)[0] + ".html").done (function (r) { var q = r.match(/"ticket"\s*:\s*\"(.+?)"/); if (q) { q = JSON.parse(atob(q[1])).file; } else { q = r.match(/,\s*file\s*:\s*\"(.+?)"/); if (!q) { $dl .text ('* 下载解析失败,请访问歌曲页解析。') .css ('color', 'red'); return ; } q = q[1]; } $dl.text('解析完毕: ').append ($('<a>').attr({ href: q, target: '_blank' }).text('点我下载')); }); break; } // 旧版单曲播放页面 waitUnTil (function () { return win.wplayer.playList.length; }, function () { $('.func_icon3>a').attr ({ href: win.wplayer.playList[0].file }).html('<b/>直链下载'); $('.rt2').hide(); $('#play').css ({ top: 'initial' }); $('.song_play').css ({ marginTop: '1em' }); $('#report').parent().hide(); }); // 新版单曲播放页面 waitUnTil ('globals', function () { $('.view_info>ul:last>li:first').replaceWith($('<li>').append ( $('<a>').text('点我下载').attr({ href: JSON.parse(atob(win.globals.ticket)).file, target: '_blank' }).css ('color', '#F87877') )); }); waitUnTil (function () { return win.$wsp && $('.player_box').length; }, function () { var $player = $('.player_box'); // 播放列表页面 var $player = $('.player_box:last'); var $dl = $('<a>').prependTo($('.p_title', $player)).after (': '); var oldCreatePlugin = win.$wsp.mediaHelper.createPlugin; win.$wsp.mediaHelper.createPlugin = function (src) { $dl.attr('href', src).text ('下'); return oldCreatePlugin.apply (win.$wsp.mediaHelper, arguments); }; }); break; // 2014.05.06 case 'gxdisk.com': case 'azpan.com': chkDU (); forceHide('.Downpagebox'); break; // 2014.04.06 case 'lepan.cc': $('#header:first').next().hide(); if (/\/file|\/view/.test(l.pathname)) { reDirWithRef($('#hsdownload').attr('href')); // console.log (); // $('#hsdownload').click(); return; } forceHide ('[class^="banner"],#dl_tips'); forceShow ('#down_box'); if ($('.dianxin>a').attr('href') == 'vip.php') { forceHide ('.content_l>.down_list_1,.file_tip'); $('.talk_show').html($('.talk_show').html() .replace(/none\.png(.*?)有广告/, 'right.jpg$1搭配 ABP 插件无广告') .replace(/none\.png(.*?)无权下载/, 'right.jpg$1插件用户任意下载') ); } break; case 'kxt.fm': case 'duomi.com': wordpressAudio(); break; case 'jing.fm': waitUnTil (function () { return win.Player.player.jPlayer; }, function () { log ('jing.fm Loader Start~'); var myDlBox = $('<a>').appendTo($('#mscPlr')).css({ position: 'absolute', right: 0, zIndex: 9 }).attr('target', '_blank').text('下载'); win.Player.player.bind(win.$.jPlayer.event.loadstart, function (eve) { myDlBox.attr('href', eve.jPlayer.status.src.replace(/\d+$/, 0)); }); }); break; case 'colafile.com': chkDU (); forceHide ('.table_right, #down_link2, #down_link3, .tui, .ad1 > .ad1 > *'); forceShow ('.ad1 > .ad1 > .downbox'); break; // 通用 phpDisk 网盘 case 'dxrr.com': if (chkDU(function (r) { return reDirWithRef(r.replace('v.', 'www.')); })) return; forceHide ('.ad,#vcode,#tui,.dcode,#down_box2,#dl_tips,.nal,.scbar_hot_td,.fbtn-vip-down'); forceShow ('#down_box,#dl_addr'); break; case '2kuai.com': case '32666.com': // <- 乱七八糟广告就属它最多 /* case "gxp.cc": */ if (chkDU()) return; forceHide ('.ad,#vcode,#tui,.dcode,#down_box2,#dl_tips,.nal,.scbar_hot_td'); forceShow ('#down_box,#dl_addr'); break; case 'sudupan.com': var tU = lurl.replace(/\/down_/i, '/sudupan/xiazai_'); if (tU != lurl) l.href = tU; forceHideFrames(); break; case 'yinyuetai.com': // http://www.yinyuetai.com/insite/get-video-info?videoId=[视频ID]&json=true var fetchDlUrlById = function (iId, fCallback) { log('Loading video for ' + iId); // 因为跨域, 所以 =-= /* jshint ignore:start */ GM_xmlhttpRequest ({ method: 'GET', url: 'http://www.yinyuetai.com/insite/get-video-info?json=true&videoId=' + iId, onload: function (u) { var r = JSON.parse (u.responseText); fCallback (r.videoInfo.coreVideoInfo.videoUrlModels, r.videoInfo.coreVideoInfo.videoName); }, onerror: function (r) { fCallback (false); } }); /* jshint ignore:end */ }; var $appTo, $ap1After2, $display = '', eDiv = $('<div>'), appendDlLinks = function (dlLinks, videoTitle) { if (dlLinks === false) { console.error('解析失败! ID: ', currentVideoId); return; } eDiv.css ({ color: 'white', 'font-size': 'small', 'margin-left': '7px' }); eDiv.html('下载: ').css('display', $display); dlLinks.forEach(function (e) { $('<a>').text(e.QualityLevelName).attr('href', e.videoUrl) .attr('title', '下载: ' + videoTitle).appendTo(eDiv) .addClass ('c_cf9'); eDiv.append(' | '); }); eDiv.append('提供: CUWCL4C ' + sVer); if ($ap1After2 == 1) $appTo.append (eDiv); else // 2 $appTo.after (eDiv); // $('#download').href = dlLink; } if (/^\/video/i.test(l.pathname)) { // Signal var currentVideoId = parseInt(l.pathname.match(/\d+/)[0]); $appTo = $('.vchart'); $ap1After2 = 2; fetchDlUrlById(currentVideoId, appendDlLinks); } else { $ap1After2 = 1; $display = 'inline'; waitUnTil (function () { return $('.J_mv_content').length; }, function () { $('.J_mv_content').on('DOMSubtreeModified', function () { setTimeout (function () { log ('> Switch'); $appTo = $('<div>').css('display', $display).appendTo('.J_video_info'); fetchDlUrlById(($('.J_video_info a[href*="video/"]').attr('href').match (/\d+(\/|)$/)||[])[0], appendDlLinks); }, 10);}); }); } break; case 'renren.com': waitUnTil(function () { return win.XN.APP.WebRadioNotlogin.player.getPlayer(); }, function () { // 插入播放按钮 var dlLink = $('<a>').attr('title', '单击下载').css(makeRotateCss(90)).css({ 'width': '38px', 'height': '36px', 'background-position': '-4px -820px', 'margin-top': '-2px' }).attr('href', win.XN.APP.WebRadioNotlogin.player.getPlayer().getAttribute('src')) .insertBefore($('.operation #lrc')); var oldPlay = win.XN.APP.WebRadioNotlogin.player.play; win.XN.APP.WebRadioNotlogin.player.play = function (url, f0) { console.warn(arguments); var ret = oldPlay.apply(win.XN.APP.WebRadioNotlogin.player, arguments); dlLink.attr('href', url); return ret; }; }); break; case 'qq.com': log('Waiting for fmQQ...'); waitUnTil(function () { return (typeof (win.$.qPlayer.player.playUrl) == 'function'); }, function () { log('fmQQ Hook start!'); // CreateDLButton var dlLink = $('<a>').css(makeRotateCss(90)).css({ 'background-position': '-24px -73px' }); $('.btn_del').after(dlLink); var firstRun = true; var setDL = function (songUrl) { dlLink.attr('href', songUrl).attr({ title: '单击下载: ' + win.$.qPlayer.playList.getSongInfoObj().msong }); }; var oldPlayurl = win.$.qPlayer.player.playUrl.bind(win.$.qPlayer.player); win.$.qPlayer.player.playUrl = function (songUrl) { setDL (songUrl); return oldPlayurl(songUrl); }; // 锁定 this 为 播放器组件 setDL(win.$.qPlayer.playList.getSongInfoObj().songurl); log('fmQQ Hook finish!'); }); break; case 'moe.fm': waitUnTil('playerInitUI', function () { // 登录破解 win.is_login = true; log('fmMoe Hook start!!'); var dlLink = $('<a>').addClass('player-button left').css(makeRotateCss(90)).css({ 'width': '26px', 'background-position': '-19px -96px' }); $('div.player-button.button-volume').first().after(dlLink); var oldPlayerInitUI = win.playerInitUI; win.playerInitUI = function (a) { dlLink.attr('href', a.completeUrl).attr('title', '单击下载: ' + a.title); log(a); return oldPlayerInitUI(a); }; log('fmMoe Hook finish!!'); }); break; case "dbank.com": case "vmall.com": // 页面整理。 $('#c_footer, #filelist_marker, div.link-left .panel-line, div[id^="ad_"], .panel-recommended, #hotkw, p.copyright-tips').remove(); break; case "vdisk.cn": forceShow('#btnbox'); forceHide('#loadingbox, #yanzhengbox, #yzmbox, #ShowDIV, ifarme'); // 清理乱七八糟的链接 clearOutsiteLink(); break; case "qjwm.com": case "7958.com": if (l.href.toLowerCase().indexOf("down_") > 0) l.href = lurl.replace(/down_/i, 'download_'); forceHide('#downtc,[id^="cpro_"],.download_alert,#inputyzm,#house,#uptown,a[href$="money.html"],a[href$="reg.html"]'); forceShow('#downtc2,.new_down'); waitUnTil('authad', function () { win.authad = win.bdshow = win.scrollTo = tFunc; }); break; case "rayfile.com": //Feisu-Rayfile,nextpag,showdown if (win.vkey) { l.href = lurl + win.vkey; } else { win.filesize = 100; win.showDownload(); win.showDownload = eFunc; // 防止 7 秒后按钮被覆盖。 // 天知道这个错误怎么来的.. 语言错误就显示不了下载按钮.. $('#downloadlink').addClass('btn_downNow_zh-cn'); $('#vodlink').addClass('btn_downTools_zh-cn'); // 整理页面 $('div.left, iframe').remove(); } break; case "songtaste.com": // SongTaste,Source-Code by (inc/common.js) // By Yulei 2012.11.30 ;Remove register and login tips. // Simplify Code + Simulate Official site action + Chrome Fix. var cssCode = { 'font-size': '15px', 'color': '#fff', 'background-color': '#000', 'text-decoration': 'none', 'padding': '3px 5px' }; var sId = $_GET.song_id; if (!sId) { if (lurl.toLowerCase().indexOf('/album/') != -1) { // 专辑页面功能添加 log('ST :: 专辑页面调整'); var btn_playAll = $('[value="连续播放"]'); var btn_noPopPlay = btn_playAll.clone().attr({ 'value': '不弹窗播放', 'onclick': '' }); btn_noPopPlay.click(function () { var id = "", arr = win.chkArray; for (i = 0; i < arr.length; i++) { if (arr[i].checked) { id += arr[i].value + ","; } } if (id.length > 1) { id = id.sub(1); l.href = "/playmusic.php?song_id=" + id; } else { alert("请选择歌曲"); } }); btn_playAll.after(btn_noPopPlay); return; } log('ST :: 单曲模式解析'); var Args = $("#playicon a")[0].href.replace(/ /g).replace(/\"/g, "'").split('\''); var sURL = Args[5], sType = Args[11], sHead = Args[13], songId = Args[15], sTime = ((new RegExp(/,(\d+)\)/).exec(Args[16]) || [, '0'])[1]), SongUrl; if (sURL.indexOf('rayfile') > 0) { SongUrl = sHead + sURL + win.GetSongType(sType); } else { SongUrl = $.ajax({ type: 'POST', url: '/time.php', cache: true, /* 从缓存读,反正如果没记录可以跑到 ST 服务器下 */ async: false, data: 'str=' + sURL + '&sid=' + songId + '&t=' + sTime, dataType: 'html', }).responseText; } $('a#custom_2').attr({ 'href': SongUrl, 'title': 'Cracked By jixun66' }).css(cssCode).text('音乐直链'); return false; } else { // 下载解析 - Hook 更换歌曲的函数,避免重复读取歌曲 + 不需要多次请求服务器不容易掉线。 log('ST :: 列表模式解析'); win.changeSong_e = win.changeSong; win.changeSong = function (a1, a2, a3) { // 2013.03.19 & 2013.04.09 修正: // 已经删除的歌曲自动跳到下一曲 if (!a1.trim()) { win.pu.doPlayNext(2); return; } log('请求歌曲 :: ' + a1 + ' :: ' + a2); $('#dl_Link').attr({ 'href': a2, 'title': a1 }); document.title = 'ST - ' + a1; // 转接给原函数 win.changeSong_e(a1, a2, a3); }; win.downSong = function () { win.open(win.theSongUrl); }; $('div#left_music_div div.p_fun a:eq(2)').css(cssCode) .text('直链下载').attr({ 'id': 'dl_Link', 'target': '_blank' }); // 2013.03.19 添加: // 重建播放列表地址 $('p.p_list_txt').append($('<a>').text('重建播放列表').click(function () { l.href = '?song_id=' + win.arr_ids.join(','); }).css({ 'cursor': 'pointer' })); log('ST :: 等待网页加载...'); var iNv = setInterval(function () { if (!win.pu.doPlayNext) { return; } log('ST :: 官方播放器删除功能修正启动'); // 修正播放器删除代码错误 :: 开始 win.pu.doPlayNext = function (t) { var now, avl, i; for (i = 0; i < win.arr_ids.length; i++) { if (win.arr_ids[i] == win.cur_sid) { now = i; break; } } // 寻找下一首未删除的歌曲。 // * 2013.01.29 修正 // 1. 上一首查找失败的情况下会滚回到当前音乐的错误。 // 2. 如果没有可听歌曲情况下无限循环的错误。 now = Math.abs((now || 0) + t); avl = 0; // 检查是否有歌曲剩余 for (i = 0; i < win.arr_ids.length; i++) { if (win.arr_ids[i]) { avl++; } } if (avl === 0) { alert('歌都被删光了还听啥...'); return; } // 寻找空位 while (true) { if (win.arr_ids[now]) { log('切换歌曲 :: ' + now.toString()); win.pu.utils(now); win.cur_sid = win.arr_ids[now]; win.playSongRight(); return; } now += t >= 0 ? 1 : -1; if (win.arr_ids.length <= now) { now = 0; } if (now < 0) { now = win.arr_ids.length; } } }; win.delSongDiv = function (songid, isbox) { log('删除歌曲 :: ' + songid.toString()); $('#' + songid).hide(); var new_songlist = []; for (var i = 0; i < win.arr_ids.length; i++) { if (win.arr_ids[i] == songid) { if (songid == win.cur_sid) win.pu.doPlayNext(1); win.arr_ids[i] = 0; } } }; // 修正播放器删除代码错误 :: 结束 log('ST :: 官方播放器删除功能修正结束'); clearInterval(iNv); }, 100); } break; case "oyinyue.com": if (l.href.toLowerCase().indexOf("/down.") > 0) { alert ('請返回音樂頁解析音樂, 此處腳本不負責解析… orz'); break; } waitUnTil (function () {return win.player.getUrl (); }, function () { $('a[href*="/Down."]').attr({ 'href': win.player.getUrl(), 'target': '_blank' }).html('<b/>直链下载'); }); break; case "it168.com": forceHide('.right_four,#wanyxShowAD'); $("#download").html ('').append($('<a>').attr({ href: $('.sign11.four_li1>a').attr('href'), class: 'sign11' }).css({ paddingLeft: '2em', color: '#fff' }).text('点我下载')); break; case '119g.com': var reg = /^(\/f\/[a-z0-9]+)(_bak|)/i; if (!reg.test(location.pathname)) return; var mat = location.pathname.match(reg) || [, '', '']; if (!mat[2]) location.pathname = mat[1] + '_bak.html'; break; case "yimuhe.com": // yimuhe ,Vcode,8s,By Yulei 2012.12.26 // Make it easy by jixun66 // /n_dd.php?file_id=476136&userlogin=niuge&ser=1 chkDU(); forceShow('#yzm'); forceHide('#loading'); $('.w632').css({height:368}); var oldDL; $('#yzm>form') .append(createNumPad(4, '#code', function () { $('#yzm>form>input[name="Submit"]').click(); setTimeout (function () { $('#download:visible>a:last').click(); }, 200); return 1; }, function () { $('#vcode_img').click(); })); if (!l.pathname.indexOf('/n_dd.php')) { forceHide('.ggao'); reDirWithRef($('#downs').attr('href')); } break; case "djkk.com": // 参考 Music liker for Beauty 代码,感谢 @yulei var pl4 = document.getElementsByClassName('play_4')[0], rmp3 = win.list[0].m4a.replace(/mp\./, 'do.').replace(/m4a/g, 'mp3'), myStyle = 'background: transparent url("/images/p_down.gif") no-repeat left center; height:15px; width:15px;'; if (/img/g.test(pl4.innerHTML)) { pl4.innerHTML = "<a href='" + win.list[0].m4a + "' style='color:blueviolet' target='_blank' title='试听音乐下载 - Cracked By Yulei'><b style='" + myStyle + "'> </b>普通</a>"; pl4.innerHTML += "<a href='" + rmp3 + "' title='高品质音乐下载 - Cracked By Yulei' target='_blank'><b style='" + myStyle + "'> </b>高清</a>"; pl4.style.width = "82px"; document.getElementsByClassName('play_2')[0].style.display = "none"; } break; case 'kuaipan.cn': // 金山快盘免登录下载解析 $('#jQrcodeDownload') .attr ('class', 'imitate-btn f16 btn-blue l') .text('免登录下载'); $('#jQrcodebox').html ('免登录下载已开始,请等待下载提示...'); $('#qrcode').remove(); $('<div>').attr('id', 'qrcode').appendTo (body); win.encodeURIComponent_e = win.encodeURIComponent; win.encodeURIComponent = function (a1) { if (a1.toString().indexOf('/getdl?') >= 0) { l.href = a1.toString(); $('.ui-dialog-title').text('Patched By Jixun'); return false; } return win.encodeURIComponent_e (a1); }; break; case 'howfile.com': forceHide ('#floatdiv div'); injStyle ('#floatdiv {top: 150px; z-index: 99999; display: block !important;}'); $('iframe,script,.row1_right').remove(); break; case '79pan.com': chkDU(); $('iframe, #code_box, #down_box2').remove(); $('#down_box').show(); break; case "87pan.com": chkDU(); $('script,.view-gg,#view-gg').remove(); break; case '9pan.net': reDirWithRef ($('.down_link>a:eq(0)').attr('href')); break; case 'nyhx.com': if (l.pathname.beginWith ('/file')) { // http://down.nyhx.com/ID.html reDirWithRef ('//down.nyhx.com/' + l.pathname.match(/\d+/)[0] + '.html'); } forceHide('#dl_tips,.adv_box,marquee,.index_box>.r,a[onclick*="VIP"]'); forceShow('#dl_addr'); break; case '9ku.com': forceHide ('#LR2,#LR3,#seegc,.dongDown'); jPlayerPatcher (function (media) { $('.ringDown').html($('<a>').attr('href', media.mp3 || media.m4a) .text('下载: ' + $('#play_musicname').text())); }); break; case '565656.com': // Let's monkey patch jPlayer xD jPlayerPatcher (function (media) { $('.play-info-otheropt > a:last').attr('href', media.mp3 || media.m4a) .find('span').text('下载: ' + media.songname + ' - ' + media.singername); }); break; case 'djye.com': $('#djInfo').bind('DOMSubtreeModified', function () { var a = $('a[href^="/down.html"]').attr('href', win.firstplay); a.attr('title', '下载: ' + $('#play_musicname').text()).css({ 'background': 'url(/images/mp3_down.gif)', 'padding': '3px 0 5px 9px' }).find('img').remove(); a.clone().css({ 'background-position': '-184px', 'padding': '3px 0 5px 34px' }).insertAfter(a); log($('a[title^="下载:"]')); }); break; case 'djcc.com': var a = $('#formusicbox'), b = a.clone().insertAfter(a); a.parent().animate({ 'height': '+=27' }, 1000); b.removeAttr('onclick').text('下载该曲').css({ 'background-color': 'lightgrey' }); $('.playbox .playstate').bind('DOMSubtreeModified', function () { var song = win.jwplayer(win._$[16]).getPlaylistItem(); b.attr('title', '下载: ' + song.title).attr('href', song.file); }); // Ad.Kill $('.left').animate({ 'width': '0' }, 1000, function () { $(this).remove(); }); $('.left').animate({ 'width': '0' }, 1000, function () { $(this).remove(); }); $('.center').css({ 'margin-top': '12px', 'margin-left': '240px' }); $('.p3').css('background', 'none'); $('.right').animate({ 'width': '0', 'left': '310' }, 1000, function () { $(this).remove(); }); $('[class*="banner"]').remove(); $('#playlistads').remove(); break; default: // log ('该域名未获得匹配,请联系作者修正该问题!'); // Do nothing. } }, 1); }); document.addEventListener('readystatechange', function () { console.log('readystatechange: ' + document.readyState); if (document.readyState != 'complete') return; log('网页已完整加载。'); switch (dhost) { case "87pan.com": case "bpan.net": $('script,.view-gg,#view-gg').remove(); break; case 'duole.com': var a = $('#player_right .last'), b = a.clone(); $('#player_right').animate({ 'width': '+=32' }, 500); $('a.music_info').css({ 'cursor': 'text' }).bind('DOMAttrModified', function () { if (this.hasAttribute('href')) this.removeAttribute('href'); }).removeAttr('href'); b.insertBefore(a.prev()).removeClass('last').css({ 'width': '0', 'display': 'inline', 'background-position': '-150px -104px' }).css(makeRotateCss(90)).animate({ 'width': '+=32' }, 500).attr('target', '_blank'); var oldPlayNew = win.duolePlayer.playNew, rollid; win.duolePlayer.playNew = function (t, n) { b.attr({ href: t, title: '单击下载: ' + this.curMusic.song_name }); win.remind.resolve({ type: rollid = rollid ? 0 : 8, uid: 0, id: 0, param: { }, msg: this.curMusic.song_name + ' [' + this.curMusic.album_name + '] - ' + this.curMusic.singer_name + '.mp3' }); return oldPlayNew(t, n); }; break; case '1ting.com': log('1ting 解析启动 :: ' + '等待播放器加载'); waitUnTil('yiting', function () { log('1ting 解析启动 :: ' + '播放器加载完毕,开始函数绑定…'); var getCurrentSongLink = function () { return win.yiting.player.entity.Source; }; // 防止下方函数绑定失效 win.$YV.down = function () { l.href = getCurrentSongLink(); }; win.yiting.player.hook('play', function () { $('.songact a.down').attr('href', getCurrentSongLink()) .removeAttr('onclick').css('border', '1px lightgrey dashed'); }); // 启动时强制刷新下载地址 win.yiting.player.hook('play'); log('1ting 解析启动 :: ' + '绑定完毕,单击原始下载按钮即可下载。'); }); break; case "ctdisk.com": case "pipipan.com": case "400gb.com": case "bego.cc": log('开始执行 城通 旗下网盘系列简化验证码。'); setTimeout (function () { // Fix Anti-ABP as it doesn't check the code. waitUnTil ('guestviewchkform', null, function (that) { return that.randcode && that.randcode.value.length == 4; }); forceHide ('.kk_xshow,div.span6:first-child'); $('.captcha').hide('slow'); $('.captcha_right').css('float', 'left'); $('#vfcode:first').parent() .append(createNumPad(4, $('#randcode')[0], function () { $('[name="user_form"]').submit(); return true; })); log('Finish 城通 旗下网盘系列简化验证码。'); }, 10); break; case "xiami.com": win.player_download = function (sId) { // 读取原始歌曲地址 var SongUrl = $($.ajax({ type: 'GET', url: '/song/playlist/id/' + sId.songId + '/object_name/default/object_id/0', cache: true, /* 从缓存读,反正如果没记录可以跑到服务器找 */ async: false }).responseText).find('location').html(); log('虾米解析 :: 歌曲ID [ ' + sId + ' ] :: 解密地址 :: ' + SongUrl); // 开始解密... SongUrl = (function (sLocation) { var num = Number(sLocation.charAt(0)), inp = sLocation.substr(1), iLe = inp.length % num, a = 0, ret = '', arr = []; for (var i = 0; i < num; i++) { arr[i] = (iLe > i ? 1 : 0) + (inp.length - iLe) / num; } for (var z = 0; z < arr[1]; z++) { a = 0; for (var j = 0; j < num; j++) { ret += inp.charAt(a + z); a += arr[j]; } } return unescape(ret.substr(0, inp.length)).replace(/\^/g, '0').replace(/\+/g, ' '); })(SongUrl); log('虾米解析 :: 歌曲ID [ ' + sId + ' ] :: 开启窗口 :: ' + SongUrl); // 开启窗口... win.open(SongUrl); }; break; case "dbank.com": case "vmall.com": win.adSend = eFunc; var eI = function (aList, t, fCallback) { var fId = false, ret = {}; console.log('Process: ', aList); for (var i = 0; i < aList.length; i++) { console.log('Check the aList[' + i + '] :: ', aList[i]); ret = fCallback(aList[i], t); if (ret.ret) { console.log('URL GET :: ' + aList[i].downloadurl); fId = aList[i].downloadurl; break; } else if (aList[i].childList) { console.log('NEXT TRY: aList[' + i + '] :: ' + aList[i].childList); fId = eI(aList[i].childList, t, fCallback); if (fId) { return fId; } } } return fId; }; // 下载解析 var iNv = setInterval(function () { if (!win.dbank.securelink.downloadfile) { return; } // 等待初始化 clearInterval(iNv); log('dBank 解析 :: 文件列表加载完毕。'); win.dbank.securelink.setStat = win.dbank.hsdownload.checkResourceSelected = eFunc; // dBank 特殊解析 win.dbank.securelink.downloadfile = function (ahref) { var fList = win.globallinkdata.data.resource.files, fId = eI(fList, ahref.id, function (l, t) { return ((l.id == t) ? { ret: 1 } : {}); }); if (!fId) { prompt('无法解析其真实地址,可能因为网站改版导致脚本失效..\n\n请提交问题和发生错误的地址到下列地址:', bugRepUrl); return; } var rA = win.dbank.crt.decrypt(fId, this.encrykey); log('dBank 解析 :: ' + rA); win.open(rA, 'CUWCL4C ' + sVer + fId); }; // 判断是否提示需要 VIP 帐号转存 if (!$('#hsdownload').length) { eI(win.globallinkdata.data.resource.files, 0, function (l) { $('a#' + l.id).click(function (e) { win.dbank.securelink.downloadfile(this); e.preventDefault(); }); }); } else { // 高速下载按钮拦截 ubA($('#hsdownload')[0]); $('#hsdownload').click(function () { $('#down_filelist .list-select input[type="checkbox"]').each(function () { if ($(this).prop('checked')) { win.dbank.securelink.downloadfile($(this).parent().parent().find('span.list-tit a[id]')[0]); } }); }); log('dBank 解析 :: 解析函数已绑定'); } }, 100); break; case 'douban.fm': // 参考代码 豆藤, UsoId: 49911 var $a = $('<a>').css({ 'background': '#9DD6C5', 'padding': '3px 5px', 'color': 'white' }).text('下载').hover(function () { $(this).css({ 'margin-left': '5px', 'padding-left': '10px', 'background': '#BAE2D6' }); }, function () { $(this).css({ 'margin-left': '0', 'padding-left': '5px', 'background': '#9DD6C5' }); }).css(makeDelayCss()) .attr('target', '_blank'); var $div = $('<div>').css({ 'float': 'right', 'margin-top': '-230px', 'margin-right': '-32px', 'font-weight': 'bold', 'font-family': '微软雅黑' }).append($a).insertAfter('.player-wrap'); log('等待豆瓣电台加载…'); waitUnTil('extStatusHandler', function () { log('豆瓣电台加载完毕! 开始绑定函数…'); var oldExtStatusHandler = win.extStatusHandler; win.extStatusHandler = function (p) { var a = JSON.parse(p); if ('start' == a.type && a.song) { $a.attr('href', a.song.url) .attr('title', '右键另存下载: ' + a.song.title); log(a.song.title + ' :: ' + a.song.url); } return oldExtStatusHandler(p); }; log('函数绑定完毕, Enjoy~'); }); break; } }, false); })(); /* * 简单成就下载 by Yulei 本脚本只作学习研究参考用,版权所有 不得滥用、它用,后果自负 * * Chrome 兼容 + 加强 by jixun66 * 个人修正内容请参考: * http://userscripts.org/scripts/show/157621#full_description * */