Greasy Fork

百度网盘批量离线

批量离线辅助脚本

目前为 2018-01-28 提交的版本。查看 最新版本

此脚本不应直接安装,它是一个供其他脚本使用的外部库。如果您需要使用该库,请在脚本元属性加入:// @require https://update.greasyfork.icu/scripts/37905/246385/%E7%99%BE%E5%BA%A6%E7%BD%91%E7%9B%98%E6%89%B9%E9%87%8F%E7%A6%BB%E7%BA%BF.js

// ==UserScript==
// @name         百度网盘批量离线
// @namespace    https://greasyfork.org/users/63665
// @homepage     https://greasyfork.org/zh-CN/scripts/23426
// @version      1.3
// @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.2.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() {
    $("#_disk_id_2").click();//点击新建按钮
    //等待新建窗口
    while ($("#newoffline-dialog").is(":visible") === false) await sleep(100);
    $("#share-offline-link").val(urls[i]);//输入一条url
    $("#newoffline-dialog").find("span:contains('确定')[class='text']").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条件为假,则批量下载完成,脚本结束
}