Greasy Fork

Greasy Fork is available in English.

百度网盘批量离线

批量离线辅助脚本

当前为 2018-03-01 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         百度网盘批量离线
// @namespace    http://greasyfork.icu/users/63665
// @homepage     http://greasyfork.icu/zh-CN/scripts/23426
// @version      1.5
// @description  批量离线辅助脚本
// @author       fenghengzhi
// @match        http://pan.baidu.com/disk/home*
// @match        http://yun.baidu.com/disk/home*
// @match        https://pan.baidu.com/disk/home*
// @match        https://yun.baidu.com/disk/home*
// @grant        none
// @run-at       document-end
// @require      https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/6.26.0/babel.min.js
// @require      https://cdnjs.cloudflare.com/ajax/libs/babel-polyfill/6.26.0/polyfill.min.js
// @require      https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js
// @note         v1.3使用es7改进代码,优化代码阅读逻辑 v1.2小幅优化
// ==/UserScript==
/* jshint ignore:start */
var inline_src = (<><![CDATA[
    /* jshint ignore:end */
    /* jshint esnext: true */
    /* jshint esversion: 6 */

    // Your code here...

let urls= [];
let i;

function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}
function alertWin(title, msg, w, h) {
    //背景层
    let bgObj = $(`<div style="position:absolute;left:0;top:0;width:100%;height:100%;opacity:0.3;background-color:#000;z-index:1000;"></div>`).appendTo('body');


    //创建一个弹出层
    let msgObj = $("#offlinelist-dialog").clone().appendTo('body');
    msgObj.attr('id', 'mul-dialog');
    msgObj.css('z-index', '1001');


    msgObj.find('.dialog-drag').mousedown(function (e) {
        let left, top, $this;
        left = e.clientX; top = e.clientY; $this = $(this);
        if (this.setCapture) {
            this.setCapture();
            this.onmousemove = function (ev) { mouseMove(ev || event); };
            this.onmouseup = mouseUp;
        }
        else {
            $(document).on("mousemove", mouseMove).on("mouseup", mouseUp);
        }
        function mouseMove(e) {
            let target = msgObj;
            let l = e.clientX - left + Number(target.css('margin-left').replace(/px$/, '')) || 0;
            let t = e.clientY - top + Number(target.css('margin-top').replace(/px$/, '')) || 0;
            //l = Math.min(l, $(window).width() - target.width() - target.position().left);
            //t = Math.min(t, $(window).height() - target.height() - target.position().top);
            left = e.clientX;
            top = e.clientY;
            target.css({ 'margin-left': l, 'margin-top': t });
        }
        function mouseUp(e) {
            let el = $this.get(0);
            if (el.releaseCapture) {
                el.releaseCapture();
                el.onmousemove = el.onmouseup = null;
            }
            else {
                $(document).unbind("mousemove", mouseMove).unbind("mouseup", mouseUp);
            }
        }
    });
    msgObj.find('.dialog-control').click(function () {
        bgObj.remove();
        msgObj.remove();
    });


    let dialogbody = msgObj.find('.dialog-body');
    dialogbody.children().remove();
    let table1 = $('<table style="width:100%;"></table>').appendTo(dialogbody);
    let tr1 = $('<tr></tr>').appendTo(table1);
    let td1 = $('<td colspan="2" style="width:100%;padding:10px;"></td>').appendTo(tr1);
    let mullineinputbox = $('<textarea id="multi_urls" style="width:100%;height:100px;border-radius:4px;border:1px solid rgb(196,196,196)"></textarea>;').appendTo(td1);
    $('head').append("<style>textarea:focus{border:1px solid rgb(192, 217, 255);}</style>");
    dialogbody.css('text-align', 'center');
    tr1 = $('<tr></tr>').insertAfter(tr1);
    td1 = $('<td style="padding-bottom:15px;"></td>').appendTo(tr1);
    let td2 = $('<td style="padding-bottom:15px;"></td>').insertAfter(td1);
    let button1 = $(`<button class="mul-button" style="width:104px;height:34px;border-radius:4px;border:none;outline:none;cursor:pointer;font:normal normal normal normal 13px / 32px 'Microsoft YaHei': SimSun;"></button>`);


    let button2 = button1.clone();
    button1.css('background-color', "rgb(59, 140, 255)").css('color', 'rgb(255,255,255)').text('确定');
    button2.css('border', '1px solid rgb(192, 217, 255)').css('background-color', "rgb(255,255,255)").css('color', 'rgb(59, 140, 255)').text('关闭');
    $('head').append("<style>button.mul-button:hover{opacity:0.7;}</style>");

    td1.append(button1);
    td2.append(button2);
    button1.click(function () {
        urls = $("#multi_urls").val().replace(/\r\n/g,'\n').replace(/\r/g,'\n').split("\n");
        button2.click();
        Multi_offline_start();
        console.debug(urls);
    });
    button2.click(function () {
        bgObj.remove();
        msgObj.remove();
    });
    msgObj.find('.select-text').text(title);
    msgObj.css('width', w);
    msgObj.css({
        'left': bgObj.width() / 2 - msgObj.width() / 2,
        'top': bgObj.height() / 2 - msgObj.height() / 2
    });

}
async function add_multi_button() {
    while ($("#offlinelist-dialog").is(":visible") === false) await sleep(100);
    //$("#offlinelist-dialog").find(".dialog-control").children().click();//点击关闭按钮
    if ($('#offlinelist-dialog span.text:contains(批量离线)').length === 0) {
        $('#offlinelist-dialog').css('width', '720px');
        let old_button = $("#_disk_id_2");
        let new_button = old_button.clone();
        new_button.find('.text').text('批量离线');
        new_button.attr('id', 'multi_download');
        new_button.click(function () {
            alertWin('输入链接', '', 500, 500);
        });
        old_button.after(new_button);
    }
}

$('body').one('click', 'a.g-button:contains(离线下载)', add_multi_button);




function Multi_offline_start() {
    //$("#_disk_id_2").click();
    i = 0;//清空计数器
    offline_download();//进入循环
}
async function offline_download() {
    $("a:contains(新建链接任务)").click();//点击新建按钮
    //等待新建窗口
    while ($("#newoffline-dialog").is(":visible") === false) await sleep(100);
    $('#share-offline-link').val(urls[i]);//输入一条url
    $('#newoffline-dialog').find('span.text:contains(确定)').click();//点击确定按钮
    check_code();
}

async function check_code() {
    //上一步1.刚添加完一条url 2.刚输完一次验证码
    //下一步1.要求输验证码或直接通过 2.输错要重输,输对就通过
    while ($("#offlinelist-dialog").is(":visible") === false && $("#dialog1").is(":visible") === false) await sleep(100);
    if ($("#dialog1").is(":visible")) {//弹出验证码
        wait_checkcode_input();
    }
    else if ($("#offlinelist-dialog").is(":visible")) wait_complete();//没有弹出验证码
    else alert('error');
}
function wait_checkcode_input() {
    $("#dialog1 .input-code").focus();
    $("#dialog1 .input-code").on('input', function () {
        if (this.value.length === 4) {
            $('#dialog1').find('span.text:contains(确定)').click();
            check_code();
        }
    });
}
async function wait_complete() {
    while ($('#offlinelist-dialog').is(':visible') === false) await sleep(100);
    ++i;
    if (i < urls.length) offline_download();//继续批量下载
    //if条件为假,则批量下载完成,脚本结束
}
/* jshint ignore:start */
]]></>).toString();
let c = Babel.transform(inline_src, { presets: ['es2015', 'es2016', 'es2017'] });
console.log(c);
eval(c.code);
/* jshint ignore:end */