이 스크립트는 직접 설치해서 쓰는 게 아닙니다. 다른 스크립트가 메타 명령 // @require https://update.greasyfork.org/scripts/37905/264273/%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/37905
// @version 1.8.1
// @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://unpkg.com/babel-standalone/babel.min.js
// @require https://unpkg.com/babel-polyfill/dist/polyfill.min.js
// @require https://unpkg.com/jquery/dist/jquery.min.js
// @note v1.6改用unpkg的库,可自动使用最新版本
// ==/UserScript==
/* 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
});
}
var add_multi_button = async function() {
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() {
$("span.text: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条件为假,则批量下载完成,脚本结束
}