您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
【官方渠道】解除百度网盘限速。每日领取【百度网盘】极速下载卷。每天都可以领3张。原理利用了官方游戏活动,【无封号风险】。联系作者请加QQ群:882776749【长期维护】
// ==UserScript== // @name 百度网盘领劵 // @name:zh 百度网盘领卷 // @namespace baiDuYunLingJuan // @version 1.1.0 // @author TING软件科技 // @description 【官方渠道】解除百度网盘限速。每日领取【百度网盘】极速下载卷。每天都可以领3张。原理利用了官方游戏活动,【无封号风险】。联系作者请加QQ群:882776749【长期维护】 // @license AGPL v3 // @icon https://vitejs.dev/logo.svg // @match https://pan.baidu.com/* // @require https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.global.prod.js // @require data:application/javascript,%3Bwindow.Vue%20%3D%20Vue%3B // @require https://cdn.jsdelivr.net/npm/[email protected]/dist/index.full.min.js // @connect wan.baidu.com // @grant GM_addStyle // @grant GM_getValue // @grant GM_setValue // @grant GM_xmlhttpRequest // @noframes // ==/UserScript== (e=>{if(typeof GM_addStyle=="function"){GM_addStyle(e);return}const a=document.createElement("style");a.textContent=e,document.head.append(a)})(" #AppBtn[data-v-6221d9fc]{position:fixed;bottom:100px;right:100px}#tingApp[data-v-24ee8511]{position:fixed;z-index:99999}body[data-v-24ee8511]{margin:0;padding:0;font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif;background-color:#f5f7fa}.content[data-v-24ee8511]{flex:1;box-sizing:border-box;background-color:#fff}.header[data-v-24ee8511]{text-align:center;margin-bottom:10px;padding:20px;background:linear-gradient(120deg,#a1c4fd,#c2e9fb);box-shadow:0 4px 6px #0000001a}.header h1[data-v-24ee8511]{margin:0;color:#2c3e50;font-size:28px}.header p[data-v-24ee8511]{margin:10px 0 0;color:#7f8c8d;font-size:16px}.task-list[data-v-24ee8511]{display:grid;padding:10px;box-sizing:border-box;grid-template-columns:repeat(auto-fill,minmax(350px,1fr));gap:14px;margin-top:20px}.task-card[data-v-24ee8511]{background:#fff;border-radius:12px;box-shadow:0 4px 15px #0000001a;padding:14px;transition:all .3s ease;border-left:5px solid #3498db}.task-card[data-v-24ee8511]:hover{transform:translateY(-5px);box-shadow:0 8px 25px #00000026}.task-card.processing[data-v-24ee8511]{border-left-color:#f39c12}.task-card.completed[data-v-24ee8511]{border-left-color:#27ae60}.task-card.error[data-v-24ee8511]{border-left-color:#e74c3c}.task-title[data-v-24ee8511]{font-size:16px;font-weight:600;margin:0 0 10px;color:#2c3e50;display:flex;justify-content:space-between;align-items:center}.task-module[data-v-24ee8511]{background-color:#ecf0f1;color:#7f8c8d;padding:3px 8px;border-radius:12px;font-size:12px;font-weight:400}.task-info[data-v-24ee8511]{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:15px 0}.info-item[data-v-24ee8511]{font-size:14px}.info-label[data-v-24ee8511]{color:#7f8c8d;font-weight:500}.info-value[data-v-24ee8511]{color:#2c3e50;font-weight:600;word-break:break-all}.task-status[data-v-24ee8511]{padding:8px 12px;border-radius:20px;font-size:13px;font-weight:500;text-align:center;margin-top:10px}.status-pending[data-v-24ee8511]{background-color:#f8f9fa;color:#6c757d}.status-processing[data-v-24ee8511]{background-color:#fff3cd;color:#856404}.status-completed[data-v-24ee8511]{background-color:#d4edda;color:#155724}.status-error[data-v-24ee8511]{background-color:#f8d7da;color:#721c24}.progress-bar[data-v-24ee8511]{height:8px;background-color:#ecf0f1;border-radius:4px;margin:15px 0;overflow:hidden}.progress-fill[data-v-24ee8511]{height:100%;background:linear-gradient(90deg,#3498db,#2ecc71);border-radius:4px;transition:width .3s ease}.loading[data-v-24ee8511]{text-align:center;padding:40px;color:#7f8c8d}.loading-spinner[data-v-24ee8511]{border:4px solid #f3f3f3;border-top:4px solid #3498db;border-radius:50%;width:40px;height:40px;animation:spin-24ee8511 1s linear infinite;margin:0 auto 20px}@keyframes spin-24ee8511{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.empty-state[data-v-24ee8511]{text-align:center;padding:60px 20px;color:#7f8c8d}.empty-state i[data-v-24ee8511]{font-size:48px;margin-bottom:20px;display:block}#el[data-v-24ee8511]{display:flex;justify-content:space-between} "); (function (vue, ElementPlus) { 'use strict'; const _export_sfc = (sfc, props) => { const target = sfc.__vccOpts || sfc; for (const [key, val] of props) { target[key] = val; } return target; }; const _sfc_main$1 = { __name: "AppBtn", setup(__props) { return (_ctx, _cache) => { return vue.openBlock(), vue.createBlock(vue.unref(ElementPlus.ElButton), { type: "primary", id: "AppBtn", size: "large" }, { default: vue.withCtx(() => [ vue.renderSlot(_ctx.$slots, "default", {}, void 0, true) ]), _: 3 }); }; } }; const AppBtn = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-6221d9fc"]]); const config = { // 根据频道Id获取任务数组 channelArr: [10066, 10065], // 过滤出免费任务 taskModules: ["game_return_play", "new_game_play"] }; window.addEventListener("message", (e) => { if (e.data.type === "start") { start(); } }); async function start(obj) { const tasks = await getAllTask(); Promise.all( tasks.map((item) => getOneDownload(item.selectGameParams, item)) ).then(); } async function getAllTask() { const channelArr = config.channelArr; const promises = channelArr.map( (channel) => new Promise((resolve) => { GM_xmlhttpRequest({ method: "GET", url: `https://wan.baidu.com/gameapi?action=bonus_pan_task_list&channel=${channel}`, headers: { "Content-Type": "application/json", Cookie: document.cookie }, onload: function(response) { resolve(JSON.parse(response.responseText)); } }); }) ); const task_result = await Promise.all(promises); const taskOneWei = []; task_result.forEach((item) => { if (item.errorNo === 0 && item.result && item.result.data) { item.result.data.forEach((task) => { if (Array.isArray(task.data)) { taskOneWei.push(...task.data); } }); } }); const taskMianFei = taskOneWei.filter( (item) => config.taskModules.includes(item.taskModule) ); const taskReal = taskMianFei.map((item) => { let selectGame = getRandomItem(item.taskGames); return { ...item, selectGame, selectGameParams: { ...url2obj(selectGame.gameUrl) } }; }); send_message({ type: "task_result", taskReal }); return taskReal; } async function getOneDownload({ gameId, taskId, activityId }, task) { const sendApi = (params) => { GM_xmlhttpRequest({ method: "GET", url: `https://wan.baidu.com/gameapi?${obj2url(params)}`, headers: { "Content-Type": "application/json", Cookie: document.cookie }, onload: async function(response) { const data = JSON.parse(response.responseText); if (data.errorNo === 110503 || data.result && data.result.data && data.result.data.remainingTaskTime === 0) { await setStorage(getId(taskId), 0); return send_message({ type: "task_status_update", taskId: params.taskId, status: `completed`, progress: 100 }); } if (data.errorNo !== 0) { return send_message({ type: "task_status_update", taskId: params.taskId, errorNo: data.errorNo, status: `error`, progress: 40, errorMessage: `${data.message}(请刷新页面 或 重新登录 )` }); } if (data.result && data.result.data && data.result.data.remainingTaskTime) { let finiTime = task.eachTaskNeedPlayTimeSecs - data.result.data.remainingTaskTime; send_message({ type: "task_status_update", taskId: params.taskId, status: `processing`, progress: parseInt( finiTime / task.eachTaskNeedPlayTimeSecs * 100 ) }); await setStorage(getId(taskId), data.result.data.remainingTaskTime); } if (data.result && data.result.data && data.result.data.nextReportInterval) { setTimeout(() => { sendApi({ ...params, isFirstReport: 0 }); }, 10 * 1e3); } } }); }; sendApi({ gameId, isFirstReport: await getStorage(getId(taskId)) ? 0 : 1, taskId, activityId, action: "bonus_task_game_play_report" }); } function send_message(data) { window.postMessage({ type: data.type, data }); } function getId(taskId) { var date = /* @__PURE__ */ new Date(); var year = date.getFullYear(); var month = date.getMonth() + 1; var day = date.getDate(); return year + "_" + month + "_" + day + "_" + taskId; } function getRandomItem(arr) { return arr[Math.floor(Math.random() * arr.length)]; } function url2obj(url) { var obj = {}; var arr = url.split("?")[1].split("&"); for (var i = 0; i < arr.length; i++) { var item = arr[i].split("="); if (item[0].trim()) { obj[item[0]] = item[1]; } } return obj; } function obj2url(obj) { var url = ""; for (var key in obj) { url += key + "=" + obj[key] + "&"; } return url.substring(0, url.length - 1); } function setStorage(key, value) { return new Promise((resolve) => { GM_setValue(key, value); resolve(); }); } function getStorage(key) { return new Promise((resolve) => { resolve(GM_getValue(key, null)); }); } const _hoisted_1 = { id: "el" }; const _hoisted_2 = { class: "content" }; const _hoisted_3 = { key: 0, class: "loading" }; const _hoisted_4 = { key: 1, class: "empty-state" }; const _hoisted_5 = { key: 2, class: "task-list" }; const _hoisted_6 = { class: "task-title" }; const _hoisted_7 = { class: "task-module" }; const _hoisted_8 = { class: "task-info" }; const _hoisted_9 = { class: "info-item" }; const _hoisted_10 = { class: "info-value" }; const _hoisted_11 = { class: "info-item" }; const _hoisted_12 = { class: "info-value" }; const _hoisted_13 = { key: 0, class: "progress-bar" }; const _hoisted_14 = { key: 0 }; const _hoisted_15 = { key: 1 }; const _hoisted_16 = { key: 2 }; const _hoisted_17 = { key: 3 }; const _hoisted_18 = { key: 4 }; const _sfc_main = { __name: "App", setup(__props) { let drawer = vue.ref(false); const tasks = vue.ref([]); const loading = vue.ref(false); const handleStartTask = () => { loading.value = true; window.postMessage({ type: "start" }, "*"); }; const init = () => { const handleMessage = (event) => { let eventData = event.data; if (eventData.type === "task_result") { tasks.value = eventData.data.taskReal.map((task) => ({ ...task, status: "pending", progress: 0 })); loading.value = false; } if (event.data.type === "task_status_update") { const taskIndex = tasks.value.findIndex((task) => { return +task?.taskId === +eventData.data.taskId; }); if (taskIndex !== -1) { tasks.value[taskIndex] = { ...tasks.value[taskIndex], ...eventData.data }; if (eventData.data.errorNo === 110008) { ElementPlus.ElMessage({ message: `请登录【百度网盘网页版】后再领取下载卷`, duration: 5e3, type: "warning" }); } } else { console.log(`找不到:${taskIndex}`); } } }; window.addEventListener("message", handleMessage); vue.onBeforeUnmount(() => { window.removeEventListener("message", handleMessage); }); }; vue.onMounted(() => { init(); }); return (_ctx, _cache) => { const _component_el_button = vue.resolveComponent("el-button"); const _component_el_drawer = vue.resolveComponent("el-drawer"); return vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [ vue.createVNode(AppBtn, { onClick: _cache[0] || (_cache[0] = ($event) => vue.isRef(drawer) ? drawer.value = !vue.unref(drawer) : drawer = !vue.unref(drawer)) }, { default: vue.withCtx(() => _cache[2] || (_cache[2] = [ vue.createTextVNode("打 开 插 件", -1) ])), _: 1, __: [2] }), vue.createVNode(_component_el_drawer, { modelValue: vue.unref(drawer), "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => vue.isRef(drawer) ? drawer.value = $event : drawer = $event), title: "百度下载卷领取助手" }, { default: vue.withCtx(() => [ vue.createElementVNode("div", null, [ vue.createVNode(_component_el_button, { loading: loading.value, onClick: handleStartTask, type: "primary", disabled: tasks.value.length }, { default: vue.withCtx(() => [ vue.createTextVNode(vue.toDisplayString(tasks.value.length ? "明天再来领取吧~" : "开始领取"), 1) ]), _: 1 }, 8, ["loading", "disabled"]) ]), vue.createElementVNode("div", _hoisted_1, [ vue.createElementVNode("div", _hoisted_2, [ loading.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3, _cache[3] || (_cache[3] = [ vue.createElementVNode("div", { class: "loading-spinner" }, null, -1), vue.createElementVNode("p", null, "正在加载可用下载卷...", -1) ]))) : tasks.value.length === 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4, _cache[4] || (_cache[4] = [ vue.createElementVNode("div", null, "📋", -1), vue.createElementVNode("h3", null, "暂无任务,点击开始领取", -1) ]))) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_5, [ _cache[7] || (_cache[7] = vue.createElementVNode("p", { style: { "color": "orange", "text-align": "right" } }, " 请勿刷新页面,否则可能影响领卷~", -1)), (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(tasks.value, (task, index) => { return vue.openBlock(), vue.createElementBlock("div", { key: index, class: vue.normalizeClass(["task-card", { "processing": task.status === "processing", "completed": task.status === "completed", "error": task.status === "error" }]) }, [ vue.createElementVNode("div", _hoisted_6, [ vue.createElementVNode("span", null, "极速下载卷 #" + vue.toDisplayString(index + 1), 1), vue.createElementVNode("span", _hoisted_7, vue.toDisplayString(task.taskModule || "未知模块"), 1) ]), vue.createElementVNode("div", _hoisted_8, [ vue.createElementVNode("div", _hoisted_9, [ _cache[5] || (_cache[5] = vue.createElementVNode("div", { class: "info-label" }, "程序ID", -1)), vue.createElementVNode("div", _hoisted_10, vue.toDisplayString(task.selectGameParams?.gameId || "N/A"), 1) ]), vue.createElementVNode("div", _hoisted_11, [ _cache[6] || (_cache[6] = vue.createElementVNode("div", { class: "info-label" }, "任务ID", -1)), vue.createElementVNode("div", _hoisted_12, vue.toDisplayString(index + 1), 1) ]) ]), task.progress ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_13, [ vue.createElementVNode("div", { class: "progress-fill", style: vue.normalizeStyle({ width: task.progress + "%" }) }, null, 4) ])) : vue.createCommentVNode("", true), vue.createElementVNode("div", { class: vue.normalizeClass(["task-status", { "status-pending": task.status === "pending", "status-processing": task.status === "processing", "status-completed": task.status === "completed", "status-error": task.status === "error" }]) }, [ task.status === "pending" ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_14, "等待领取")) : task.status === "processing" ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_15, "领取中... " + vue.toDisplayString(task.progress) + "%", 1)) : task.status === "completed" ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_16, "✅ 已领取,明天再来吧~")) : task.status === "error" ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_17, "❌ 错误: " + vue.toDisplayString(task.errorMessage), 1)) : (vue.openBlock(), vue.createElementBlock("span", _hoisted_18, "未知状态")) ], 2) ], 2); }), 128)) ])) ]) ]) ]), _: 1 }, 8, ["modelValue"]) ], 64); }; } }; const App = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-24ee8511"]]); var _GM_getValue = /* @__PURE__ */ (() => typeof GM_getValue != "undefined" ? GM_getValue : void 0)(); var _GM_setValue = /* @__PURE__ */ (() => typeof GM_setValue != "undefined" ? GM_setValue : void 0)(); var _GM_xmlhttpRequest = /* @__PURE__ */ (() => typeof GM_xmlhttpRequest != "undefined" ? GM_xmlhttpRequest : void 0)(); window.GM_xmlhttpRequest = _GM_xmlhttpRequest; window.GM_setValue = _GM_setValue; window.GM_getValue = _GM_getValue; const link = document.createElement("link"); link.rel = "stylesheet"; link.href = "https://cdn.jsdelivr.net/npm/[email protected]/dist/index.css"; document.head.appendChild(link); const appContainer = document.createElement("div"); const appId = `tingApp`; appContainer.id = appId; document.body.appendChild(appContainer); vue.createApp(App).use(ElementPlus).mount(appContainer); })(Vue, ElementPlus);