// ==UserScript== // @name 百度网盘直链满速下载助手(智狐版本) // @namespace http://zhihupe.com/ // @version 0.1.9 // @antifeature zhihu 为防止接口被盗!该脚本需要输入验证码之后才能使用完整功能,感谢理解 // @description 【12月25日 满速下载体验】本脚本是基于超级会员解析,然后获取高速下载直链,下载速度基本可以跑满你的带宽!一共支持三种下载方式,同时支持Windows,Mac,Linux,Android等多平台,每一种都能给你一种高速下载的体验! // @match https://pan.baidu.com/* // @icon https://www.zhihupe.com/favicon.ico // @require https://cdn.staticfile.org/limonte-sweetalert2/11.1.9/sweetalert2.all.min.js // @require https://cdn.staticfile.org/jquery/3.6.0/jquery.min.js // @require https://cdn.jsdelivr.net/npm/crypto-js@4.1.1/crypto-js.min.js // @match *.baidu.com/* // @grant GM_xmlhttpRequest // @grant GM_openInTab // @grant GM_addStyle // @grant GM_setClipboard // @grant unsafeWindow // @connect duska.cn // @license AGPL // @downloadURL none // ==/UserScript== var Page = ""; function getPwd(len) { len = len || 4; let $char = 'abcdefhijkmnprstwxyz123456789'; let l = $char.length; let pwd = ''; for (let i = 0; i < len; i++) { pwd += $char.charAt(Math.floor(Math.random() * l)); } return pwd; } function getList() { try { return require('system-core:context/context.js').instanceForSystem.list.getSelected(); } catch (e) { return document.querySelector('.nd-main-layout').__vue__.$children[2].selectedList; } } function getSelectedfileList() { let list = getList(); if (list && list.length === 1) { if (list[0].isdir === 1) { return zhihu.message.error('提示:请打开文件夹后勾选文件!'); } return list[0]; }else if(list.length > 1){ return zhihu.message.error('提示:不要同时勾选多个文件'); }else{ return zhihu.message.error('提示:请先勾选要下载的文件!'); } } function Toast(msg, duration = 3000) { var m = document.createElement('div'); m.innerHTML = msg; m.style.cssText = "max-width:60%;min-width: 150px;padding:0 14px;height: 40px;color: rgb(255, 255, 255);line-height: 40px;text-align: center;border-radius: 4px;position: fixed;top: 50%;left: 50%;transform: translate(-50%, -50%);z-index: 999999;background: rgba(0, 0, 0,.7);font-size: 16px;"; document.body.appendChild(m); setTimeout(() => { var d = 0.5; m.style.webkitTransition = '-webkit-transform ' + d + 's ease-in, opacity ' + d + 's ease-in'; m.style.opacity = '0'; setTimeout(() => { document.body.removeChild(m) }, d * 1000); }, duration); } addbtn(); function getPage(){ let url = location.href; if (url.indexOf(".baidu.com/disk/main") > 0) { Page = "main" } else if (url.indexOf(".baidu.com/disk/home") > 0) { Page = "home" } } async function addbtn() { await sleep(1500); getPage(); console.log(Page) if (Page === 'home'){ let button = ` `; $('.nd-main-layout__body div:has(a.nd-upload-button)>a.nd-upload-button:first').before(button); } $('#zhihuDown').on('click', async e => { let file = getSelectedfileList(), pwd = getPwd(4); if (!file) return; if (Page === 'home'){ zhihu.message.success('正在获取百度分享链接...'); } if (Page === 'main'){ zhihu.message.error('请使用旧版页面下载'); } let surl = await getShortUrl(file.fs_id, pwd); if (!surl) { return zhihu.message.error('百度分享链接获取失败'); } showMain(surl, pwd, file.server_filename) console.log(surl,pwd); }); } function getShortUrl(fs_id, pwd) { let bdstoken = unsafeWindow.locals.dump('bdstoken'); return fetch(`https://pan.baidu.com/share/set?channel=chunlei&clienttype=0&web=1&channel=chunlei&web=1&app_id=250528&bdstoken=${bdstoken}&clienttype=0`, { "headers": { "accept": "*/*", "accept-language": "zh-CN,zh;q=0.9", "content-type": "text/plain;charset=UTF-8", "sec-fetch-dest": "empty", "sec-fetch-mode": "cors", "sec-fetch-site": "none" }, "referrerPolicy": "no-referrer-when-downgrade", "body": `fid_list=[${fs_id}]&schannel=4&channel_list=[]&period=1&pwd=` + pwd, "method": "POST", "mode": "cors", "credentials": "include" }).then(r => r.json()).then(r => r.shorturl.replace(/^.+\//, '')).catch(e => null); } function getFileInfo(surl, pwd, passwordCode, website) { return new Promise((resolve, reject) => { GM_xmlhttpRequest({ method: 'POST', data: `surl=${surl}&pwd=${pwd}&Password=` + passwordCode, url: website, headers: { "content-type": "application/x-www-form-urlencoded", }, onload: res => { if (res.status != 200) return reject(res); resolve(res.responseText); console.log(res.responseText) }, onerror: err => reject(err) }); }).then(r => { let m = r.match(/javascript:confirmdl\((.+)\);/); console.log(m); if (m) return m[1]; return Promise.reject($(r).find('div.alert.alert-danger').text().trim() || `获取下载信息失败`); }); } function getParam(str) { function fetch_token(fs_id, timestamp, sign, randsk, share_id, uk, bdstoken, filesize) { let base64 = btoa(fs_id + sign + uk); let base642 = btoa("nbest" + base64 + fs_id + "Yuan_Tuo" + share_id + sign + base64 + "baiduwp-php-donate"); let md5 = CryptoJS.MD5(base642 + timestamp + base64).toString() return md5; } function urlEncode(obj) { return Array.isArray(obj) ? obj.map(o => urlEncode(o)).join('&') : Object.keys(obj).map(key => key + '=' + obj[key]).join('&'); } let arr = str.replace(/'/g,'').split(','); arr.push(fetch_token(...arr)); return urlEncode(['fs_id', 'time', 'sign', 'randsk', 'share_id', 'uk', 'bdstoken', 'filesize', 'token'].reduce((t, v, i) => (t[v] = arr[i]) && t, {})); } function getLinkCommon(str, website) { return new Promise((resolve, reject) => { GM_xmlhttpRequest({ method: 'POST', data: getParam(str), url: website + "/?download", headers: { "content-type": "application/x-www-form-urlencoded", }, onload: res => { if (res.status != 200) return reject(res); resolve(res.responseText); }, onerror: err => reject(err) }); }).then(r => { let link = $(r).find('#https').attr('href'); if (link) return link; return Promise.reject($(r).find('div.alert.alert-danger').text().trim() || '获取直链失败'); }); } function sleep(time) { return new Promise(resolve => setTimeout(resolve, time)); } let toast = Swal.mixin({ toast: true, showConfirmButton: false, timer: 3500, timerProgressBar: false, didOpen: (toast) => { toast.addEventListener('mouseenter', Swal.stopTimer); toast.addEventListener('mouseleave', Swal.resumeTimer); } }); let zhihu = { message: { success(text) { toast.fire({title: text, icon: 'success'}); }, error(text) { toast.fire({title: text, icon: 'error'}); }, warning(text) { toast.fire({title: text, icon: 'warning'}); }, info(text) { toast.fire({title: text, icon: 'info'}); }, question(text) { toast.fire({title: text, icon: 'question'}); } } } function showMain(surl, pwd, fileName) { let defaultpassword = ""; if (localStorage.password && (Date.now() - +localStorage.passwordTime) < 172800) { defaultpassword = localStorage.password; } else { localStorage.password = ""; } let html = `
`; $('#layoutMain div:has(span.g-new-create)>span.g-dropdown-button:first').before(button); } if (Page === 'main'){ let button = `