用惯了迅雷和百度云,似乎就不会用其它的下载工具
众所周知,常用的下载工具都有限速的困扰
因此这次,介绍一款性能极优的下载工具——IMD
下载地址:
http://www.pc6.com/softview/SoftView_24680.html
在PC6下载站下载的软件,亲测可用。
或者http://www.ucbug.com/soft/26392.html
IMD优势1:体积小,仅7.9M,且完全无广告,界面干净清洁
IMD优势2:速度快,相比限速后的各类下载软件,彷佛为我打开了一个新的世界。
功能新发现:一般在图片搜索功能,仅能看到首页,但后面的就看不到了,IMD就有这种魔力能把后面的照片也找出来,方法是:
获取该图片连接,在IDM中进行添加批量任务,把图片连接放到地址上去,并使用(*)通配符进行修改,就像下图的提示一样
再者,利用IDM也可以下载百度云的文件,方法:
利用油猴插件
这个插件是用在浏览器上的,相当于给浏览器插上了N多双翅膀
我只说如何处理百度云的文件,其它功能在网上有一大批,对我来说,如同发现了新大陆。
不同的浏览器可能对应不同的油猴插件
下载油猴插件后,例如Microsoft Edge
打开Microsoft Edge的扩展功能
如果之前下载了IDM,那么在扩展界面就会显示有IDM的存在
在扩展界面上选择开发人员模式,并把下载好的油猴插件移到
扩展界面中,会有提示,按照提示选择按照即可,此时的界面应该是这样子的:
到了这一步,接下来就是脚本的写入。我是写入了网盘助手和网盘链接检查 这两个脚本文件,写脚本的时候:
点击上图的“+”符号,将脚本代替编辑器上的内容即可。
以下为网盘助手的脚本文件:
// ==UserScript==
// @name 网盘助手
// @namespace http://go.newday.me/s/pan-home
// @version 0.4.2
// @icon http://cdn.newday.me/addon/pan/favicon.ico
// @author 哩呵
// @description 大概是最优雅好用的网盘助手了;插件主要功能有:[1]百度网盘、腾讯微云、蓝奏云、天翼云盘万能钥匙 [2]百度网盘生成并展示下载链接 [3]百度网盘分享时自定义提取码
// @match *://pan.baidu.com/*
// @match *://yun.baidu.com/*
// @match *://*.weiyun.com/*
// @match *://*.lanzous.com/*
// @match *://*.lanzoux.com/*
// @match *://cloud.189.cn/*
// @match *://*.newday.me/*
// @match *://*.likestyle.cn/*
// @connect newday.me
// @connect likestyle.cn
// @require https://cdn.staticfile.org/jquery/3.5.0/jquery.min.js
// @require https://cdn.staticfile.org/dompurify/2.0.10/purify.min.js
// @require https://cdn.staticfile.org/snap.svg/0.5.1/snap.svg-min.js
// @run-at document-start
// @grant unsafeWindow
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_deleteValue
// @grant GM_listValues
// @grant GM_openInTab
// @grant GM_notification
// @grant GM_xmlhttpRequest
// ==/UserScript==
(function () {
'use strict';
var manifest = {
"name": "wpzs",
"urls": {
},
"apis": {
"version": "https://api.newday.me/share/disk/version",
"origin": "https://api.newday.me/share/disk/origin",
"query": "https://api.newday.me/share/disk/query",
"store": "https://api.newday.me/share/disk/store",
"lists": "https://api.newday.me/share/disk/lists",
"delete": "https://api.newday.me/share/disk/delete"
},
"logger_level": 3,
"options_page": "http://go.newday.me/s/pan-option"
};
var container = (function () {
var obj = {
defines: {
},
modules: {
}
};
obj.define = function (name, requires, callback) {
name = obj.processName(name);
obj.defines[name] = {
requires: requires,
callback: callback
};
};
obj.require = function (name, cache) {
if (typeof cache == "undefined") {
cache = true;
}
name = obj.processName(name);
if (cache && obj.modules.hasOwnProperty(name)) {
return obj.modules[name];
} else if (obj.defines.hasOwnProperty(name)) {
var requires = obj.defines[name].requires;
var callback = obj.defines[name].callback;
var module = obj.use(requires, callback);
cache && obj.register(name, module);
return module;
}
};
obj.use = function (requires, callback) {
var module = {
exports: undefined
};
var params = obj.buildParams(requires, module);
var result = callback.apply(this, params);
if (typeof result != "undefined") {
return result;
} else {
return module.exports;
}
};
obj.register = function (name, module) {
name = obj.processName(name);
obj.modules[name] = module;
};
obj.buildParams = function (requires, module) {
var params = [];
requires.forEach(function (name) {
params.push(obj.require(name));
});
params.push(obj.require);
params.push(module.exports);
params.push(module);
return params;
};
obj.processName = function (name) {
return name.toLowerCase();
};
return {
define: obj.define,
use: obj.use,
register: obj.register,
modules: obj.modules
};
})();
container.define("gm", [], function () {
var obj = {
};
obj.ready = function (callback) {
if (typeof GM_getValue != "undefined") {
callback && callback();
}
else {
setTimeout(function () {
obj.ready(callback);
}, 100);
}
};
return obj;
});
/** common **/
container.define("gmDao", [], function () {
var obj = {
items: {
}
};
obj.get = function (name) {
return GM_getValue(name);
};
obj.getBatch = function (names) {
var items = {
};
names.forEach(function (name) {
items[name] = obj.get(name);
});
return items;
};
obj.getAll = function () {
return obj.getBatch(GM_listValues());
};
obj.set = function (name, item) {
GM_setValue(name, item);
};
obj.setBatch = function (items) {
for (var name in items) {
obj.set(name, items[name]);
}
};
obj.setAll = function (items) {
var names = GM_listValues();
names.forEach(function (name) {
if (!items.hasOwnProperty(name)) {
obj.remove(name);
}
});
obj.setBatch(items);
};
obj.remove = function (name) {
GM_deleteValue(name);
};
obj.removeBatch = function (names) {
names.forEach(function (name) {
obj.remove(name);
});
};
obj.removeAll = function () {
obj.removeBatch(GM_listValues());
};
return obj;
});
container.define("ScopeDao", [], function () {
return function (dao, scope) {
var obj = {
items: {
}
};
obj.get = function (name) {
return obj.items[name];
};
obj.getBatch = function (names) {
var items = {
};
names.forEach(function (name) {
if (obj.items.hasOwnProperty(name)) {
items[name] = obj.items[name];
}
});
return items;
};
obj.getAll = function () {
return obj.items;
};
obj.set = function (name, item) {
obj.items[name] = item;
obj.sync();
};
obj.setBatch = function (items) {
obj.items = Object.assign(obj.items, items);
obj.sync();
};
obj.setAll = function (items) {
obj.items = Object.assign({
}, items);
obj.sync();
};
obj.remove = function (name) {
delete obj.items[name];
obj.sync();
};
obj.removeBatch = function (names) {
names.forEach(function (name) {
delete obj.items[name];
});
obj.sync();
};
obj.removeAll = function () {
obj.items = {
};
obj.getDao().remove(obj.getScope());
};
obj.init = function () {
var items = obj.getDao().get(obj.getScope());
if (items instanceof Object) {
obj.items = items;
}
};
obj.sync = function () {
obj.getDao().set(obj.getScope(), obj.items);
};
obj.getDao = function () {
return dao;
};
obj.getScope = function () {
return scope;
};
return obj.init(), obj;
};
});
container.define("config", ["factory"], function (factory) {
var obj = {
};
obj.getConfig = function (name) {
return obj.getDao().get(name);
};
obj.setConfig = function (name, value) {
obj.getDao().set(name, value);
};
obj.getAll = function () {
return obj.getDao().getAll();
};
obj.getDao = function () {
return factory.getConfigDao();
};
return obj;
});
container.define("storage", ["factory"], function (factory) {
var obj = {
};
obj.getValue = function (name) {
return obj.getDao().get(name);
};
obj.setValue = function (name, value) {
obj.getDao().set(name, value);
};
obj.getAll = function () {
return obj.getDao().getAll();
};
obj.getDao = function () {
return factory.getStorageDao();
};
return obj;
});
container.define("option", ["config", "constant"], function (config, constant) {
var obj = {
name: "option",
constant: constant.option
};
obj.isOptionActive = function (item) {
var name = item.name;
var option = obj.getOption();
return option.indexOf(name) >= 0 ? true : false;
};
obj.setOptionActive = function (item) {
var name = item.name;
var option = obj.getOption();
if (option.indexOf(name) < 0) {
option.push(name);
obj.setOption(option);
}
};
obj.setOptionUnActive = function (item) {
var name = item.name;
var option = obj.getOption();
var index = option.indexOf(name);
if (index >= 0) {
delete option[index];
obj.setOption(option);
}
};
obj.getOption = function () {
var option = [];
var optionList = obj.getOptionList();
Object.values(obj.constant).forEach(function (item) {
var name = item.name;
if (optionList.hasOwnProperty(name)) {
if (optionList[name] != "no") {
option.push(name);
}
}
else if (item.value != "no") {
option.push(name);
}
});
return option;
};
obj.setOption = function (option) {
var optionList = {
};
Object.values(obj.constant).forEach(function (item) {
var name = item.name;
if (option.indexOf(name) >= 0) {
optionList[name] = "yes";
} else {
optionList[name] = "no";
}
});
obj.setOptionList(optionList);
};
obj.getOptionList = function () {
var optionList = config.getConfig(obj.name);
return optionList ? optionList : {
};
};
obj.setOptionList = function (optionList) {
config.setConfig(obj.name, optionList);
};
return obj;
});
container.define("manifest", [], function () {
var obj = {
manifest: manifest
};
obj.getItem = function (name) {
return obj.manifest[name];
};
obj.getManifest = function () {
return obj.manifest;
};
obj.getName = function () {
return obj.getItem("name");
};
obj.getAppName = function () {
return obj.getItem("app_name");
};
obj.getUrl = function (name) {
var urls = obj.getItem("urls");
(urls instanceof Object) || (urls = {
});
return urls[name];
};
obj.getApi = function (name) {
var apis = obj.getItem("apis");
(apis instanceof Object) || (apis = {
});
return apis[name];
};
obj.getOptionsPage = function () {
if (GM_info.script.optionUrl) {
return GM_info.script.optionUrl;
}
else {
return obj.getItem("options_page");
}
};
return obj;
});
container.define("env", ["config", "manifest"], function (config, manifest) {
var obj = {
modes: {
ADDON: "addon",
SCRIPT: "script"
},
browsers: {
FIREFOX: "firefox",
EDG: "edg",
EDGE: "edge",
BAIDU: "baidu",
LIEBAO: "liebao",
UC: "uc",
QQ: "qq",
SOGOU: "sogou",
OPERA: "opera",
MAXTHON: "maxthon",
IE2345: "2345",
SE360: "360",
CHROME: "chrome",
SAFIRI: "safari",
OTHER: "other"
}
};
obj.getName = function () {
return manifest.getName();
};
obj.getMode = function () {
if (GM_info.mode) {
return GM_info.mode;
}
else {
return obj.modes.SCRIPT;
}
};
obj.getAid = function () {
if (GM_info.scriptHandler) {
return GM_info.scriptHandler.toLowerCase();
}
else {
return "unknown";
}
};
obj.getUid = function () {
var uid = config.getConfig("uid");
if (!uid) {
uid = obj.randString(32);
config.setConfig("uid", uid);
}
return uid;
};
obj.getBrowser = function () {
if (!obj._browser) {
obj._browser = obj.matchBrowserType(navigator.userAgent);
}
return obj._browser;
};
obj.getVersion = function () {
return GM_info.script.version;
};
obj.getEdition = function () {
return GM_info.version;
};
obj.getInfo = function () {
return {
mode: obj.getMode(),
aid: obj.getAid(),
uid: obj.getUid(),
browser: obj.getBrowser(),
version: obj.getVersion(),
edition: obj.getEdition()
};
};
obj.matchBrowserType = function (userAgent) {
var browser = obj.browsers.OTHER;
userAgent = userAgent.toLowerCase();
if (userAgent.match(/firefox/) != null) {
browser = obj.browsers.FIREFOX;
} else if (userAgent.match(/edge/) != null) {
browser = obj.browsers.EDGE;
} else if (userAgent.match(/edg/) != null) {
browser = obj.browsers.EDG;
} else if (userAgent.match(/bidubrowser/) != null) {
browser = obj.browsers.BAIDU;
} else if (userAgent.match(/lbbrowser/) != null) {
browser = obj.browsers.LIEBAO;
} else if (userAgent.match(/ubrowser/) != null) {
browser = obj.browsers.UC;
} else if (userAgent.match(/qqbrowse/) != null) {
browser = obj.browsers.QQ;
} else if (userAgent.match(/metasr/) != null) {
browser = obj.browsers.SOGOU;
} else if (userAgent.match(/opr/) != null) {
browser = obj.browsers.OPERA;
} else if (userAgent.match(/maxthon/) != null) {
browser = obj.browsers.MAXTHON;
} else if (userAgent.match(/2345explorer/) != null) {
browser = obj.browsers.IE2345;
} else if (userAgent.match(/chrome/) != null) {
if (navigator.mimeTypes.length > 10) {
browser = obj.browsers.SE360;
} else {
browser = obj.browsers.CHROME;
}
} else if (userAgent.match(/safari/) != null) {
browser = obj.browsers.SAFIRI;
}
return browser;
};
obj.randString = function (length) {
var possible = "abcdefghijklmnopqrstuvwxyz0123456789";
var text = "";
for (var i = 0; i < length; i++) {
text += possible.charAt(Math.floor(Math.random() * possible.length));
}
return text;
};
return obj;
});
container.define("http", [], function () {
var obj = {
};
obj.ajax = function (option) {
var details = {
method: option.type,
url: option.url,
responseType: option.dataType,
onload: function (result) {
if (!result.status || parseInt(result.status / 100) == 2) {
option.success && option.success(result.response);
}
else {
option.error && option.error("");
}
},
onerror: function (result) {
option.error && option.error(result.error);
}
};
// 提交数据
if (option.data instanceof Object) {
if (option.data instanceof FormData) {
details.data = option.data;
}
else {
var formData = new FormData();
for (var i in option.data) {
formData.append(i, option.data[i]);
}
details.data = formData;
}
}
// 自定义头
if (option.headers) {
details.headers = option.headers;
}
// 超时
if (option.timeout) {
details.timeout = option.timeout;
}
GM_xmlhttpRequest(details);
};
return obj;
});
container.define("router", [], function () {
var obj = {
};
obj.getUrl = function () {
return location.href;
};
obj.goUrl = function (url) {
location.href = url;
};
obj.openUrl = function (url) {
window.open(url);
};
obj.openTab = function (url, active) {
GM_openInTab(url, !active);
};
obj.jumpLink = function (jumpUrl, jumpMode) {
switch (jumpMode) {
case 9:
// self
obj.goUrl(jumpUrl);
break;
case 6:
// new
obj.openUrl(jumpUrl);
break;
case 3:
// new & not active
obj.openTab(jumpUrl, false);
break;
case 1:
// new & active
obj.openTab(jumpUrl, true);
break;
}
};
obj.getUrlParam = function (name) {
var param = obj.parseUrlParam(obj.getUrl());
if (name) {
return param.hasOwnProperty(name) ? param[name] : null;
}
else {
return param;
}
};
obj.parseUrlParam = function (url) {
if (url.indexOf("?")) {
url = url.split("?")[1];
}
var reg = /([^=&\s]+)[=\s]*([^=&\s]*)/g;
var obj = {
};
while (reg.exec(url)) {
obj[RegExp.$1] = RegExp.$2;
}
return obj;
};
return obj;
});
container.define("logger", ["env", "manifest"], function (env, manifest) {
var obj = {
constant: {
DEBUG: 0,
INFO: 1,
WARN: 2,
ERROR: 3,
NONE: 4
}
};
obj.debug = function (message) {
obj.log(message, obj.constant.DEBUG);
};
obj.info = function (message) {
obj.log(message, obj.constant.INFO);
};
obj.warn = function (message) {
obj.log(message, obj.constant.WARN);
};
obj.error = function (message) {
obj.log(message, obj.constant.ERROR);
};
obj.log = function (message, level) {
if (level < manifest.getItem("logger_level")) {
return false;
}
console.group("[" + env.getName() + "]" + env.getMode());
console.log(message);
console.groupEnd();
};
return obj;
});
container.define("meta", ["env", "$"], function (env, $) {
var obj = {
};
obj.existMeta = function (name) {
name = obj.processName(name);
if ($("meta[name='" + name + "']").length) {
return true;
}
else {
return false;
}
};
obj.appendMeta = function (name, content) {
name = obj.processName(name);
content || (content = "on");
$('<meta name="' + name + '" content="on">').appendTo($("head"));
};
obj.processName = function (name) {
return env.getName() + "::" + name;
};
return obj;
});
container.define("unsafeWindow", [], function () {
if (typeof unsafeWindow == "undefined") {
return window;
}
else {
return unsafeWindow;
}
});
container.define("svgCrypt", ["Snap"], function (Snap) {
var obj = {
};
obj.getReqData = function () {
var reqTime = Math.round(new Date().getTime() / 1000);
var reqPoint = obj.getStrPoint("timestamp:" + reqTime);
return {
req_time: reqTime,
req_point: reqPoint
};
};
obj.getStrPoint = function (str) {
if (str.length < 2) {
return "0:0";
}
var path = "";
var current, last = str[0].charCodeAt();
var sum = last;
for (var i = 1; i < str.length; i++) {
current = str[i].charCodeAt();
if (i == 1) {
path = path + "M";
} else {
path = path + " L";
}
path = path + current + " " + last;
last = current;
sum = sum + current;
}
path = path + " Z";
var index = sum % str.length;
var data = Snap.path.getPointAtLength(path, str[index].charCodeAt());
return data.m.x + ":" + data.n.y;
};
return obj;
});
container.define("calendar", [], function () {
var obj = {
};
obj.getTime = function () {
return (new Date()).getTime();
};
obj.formatTime = function (format, timestamp) {
format || (format = "Y-m-d H:i:s");
timestamp || (timestamp = obj.getTime());
var date = new Date(timestamp);
var year = 1900 + date.getYear();
var month = "0" + (date.getMonth() + 1);
var day = "0" + date.getDate();
var hour = "0" + date.getHours();
var minute = "0" + date.getMinutes();
var second = "0" + date.getSeconds();
var vars = {
"Y": year,
"m": month.substring(month.length - 2, month.length),
"d": day.substring(day.length - 2, day.length),
"H": hour.substring(hour.length - 2, hour.length),
"i": minute.substring(minute.length - 2, minute.length),
"s": second.substring(second.length - 2, second.length)
};
return obj.replaceVars(vars, format);
};
obj.replaceVars = function (vars, value) {
Object.keys(vars).forEach(function (key) {
value = value.replace(key, vars[key]);
});
return value;
};
return obj;
});
container.define("oneData", ["env", "http"], function (env, http) {
var obj = {
};
obj.requestOneApi = function (url, data, callback) {
http.ajax({
type: "post",
url: url,
dataType: "json",
data: Object.assign(env.getInfo(), data),
success: function (response) {
callback && callback(response);
},
error: function () {
callback && callback("");
}
});
};
return obj;
});
container.define("$extend", ["$", "DOMPurify", "logger"], function ($, DOMPurify, logger) {
var obj = {
};
obj.init = function () {
if (DOMPurify && DOMPurify instanceof Function) {
var domPurify = DOMPurify(window);
$.fn.safeHtml = function (html) {
try {
this.html(domPurify.sanitize(html));
}
catch (err) {
logger.error(err);
}
};
}
else {
$.fn.safeHtml = function (html) {
this.html(html);
};
}
};
return obj.init(), obj;
});
container.define("appRunner", ["router", "logger", "meta", "$"], function (router, logger, meta, $, require) {
var obj = {
};
obj.run = function (appList) {
var metaName = "status";
if (meta.existMeta(metaName)) {
logger.info("setup already");
}
else {
// 添加meta
meta.appendMeta(metaName);
// 运行应用
$(function () {
obj.runAppList(appList);
});
}
};
obj.runAppList = function (appList) {
var url = router.getUrl();
for (var i in appList) {
var app = appList[i];
var match = obj.matchApp(url, app);
if (match == false) {
continue;
}
if (require(app.name).run() == true) {
break;
}
}
};
obj.matchApp = function (url, app) {
var match = false;
app.matchs.forEach(function (item) {
if (url.indexOf(item) > 0 || item == "*") {
match = true;
}
});
return match;
};
return obj;
});
/** custom **/
container.define("factory", ["gmDao", "ScopeDao"], function (gmDao, ScopeDao) {
var obj = {
daos: {
}
};
obj.getConfigDao = function () {
return obj.getDao("config", function () {
return ScopeDao(gmDao, "$config");
});
};
obj.getStorageDao = function () {
return obj.getDao("storage", function () {
return ScopeDao(gmDao, "$storage");
});
};
obj.getDao = function (key, createFunc) {
if (!obj.daos.hasOwnProperty(key)) {
obj.daos[key] = createFunc();
}
return obj.daos[key];
};
return obj;
});
container.define("constant", [], function () {
return {
source: {
baidu: "baidu",
weiyun: "weiyun",
lanzous: "lanzous",
ty189: "189"
},
option: {
baidu_page_home: {
name: "baidu_page_home",
value: "yes"
},
baidu_page_share: {
name: "baidu_page_share",
value: "yes"
},
baidu_page_verify: {
name: "baidu_page_verify",
value: "yes"
},
baidu_share_status: {
name: "baidu_share_status",
value: "yes"
},
baidu_custom_password: {
name: "baidu_custom_password",
value: "yes"
},
baidu_show_origin: {
name: "baidu_show_origin",
value: "yes"
},
baidu_auto_jump: {
name: "baidu_auto_jump",
value: "no"
},
weiyun_page_home: {
name: "weiyun_page_home",
value: "yes"
},
weiyun_page_share: {
name: "weiyun_page_share",
value: "yes"
},
weiyun_page_verify: {
name: "weiyun_page_verify",
value: "yes"
},
weiyun_share_status: {
name: "weiyun_share_status",
value: "yes"
},
weiyun_auto_jump: {
name: "weiyun_auto_jump",
value: "no"
},
lanzous_page_verify: {
name: "lanzous_page_verify",
value: "yes"
},
lanzous_share_status: {
name: "lanzous_share_status",
value: "yes"
},
lanzous_auto_jump: {
name: "lanzous_auto_jump",
value: "no"
},
ty189_page_home: {
name: "189_page_home",
value: "yes"
},
ty189_page_share: {
name: "189_page_share",
value: "yes"
},
ty189_page_verify: {
name: "189_page_verify",
value: "yes"
},
ty189_share_status: {
name: "189_share_status",
value: "yes"
},
ty189_auto_jump: {
name: "189_auto_jump",
value: "no"
}
}
};
});
container.define("api", ["manifest", "oneData", "svgCrypt"], function (manifest, oneData, svgCrypt) {
var obj = {
};
obj.versionQuery = function (callback) {
oneData.requestOneApi(manifest.getApi("version"), {
}, callback);
};
obj.queryShareOrigin = function (shareSource, shareId, shareLink, callback) {
var data = {
share_id: shareId,
share_source: shareSource,
share_point: svgCrypt.getStrPoint(shareId),
share_link: shareLink
};
oneData.requestOneApi(manifest.getApi("origin"), data, callback);
};
obj.querySharePwd = function (shareSource, shareId, shareLink, callback) {
var data = {
share_id: shareId,
share_source: shareSource,
share_point: svgCrypt.getStrPoint(shareId),
share_link: shareLink
};
oneData.requestOneApi(manifest.getApi("query"), data, callback);
};
obj.storeSharePwd = function (shareId, sharePwd, shareLink, shareSource, callback) {
var data = {
share_id: shareId,
share_pwd: sharePwd,
share_source: shareSource,
share_point: svgCrypt.getStrPoint(shareId),
share_link: shareLink
};
oneData.requestOneApi(manifest.getApi("store"), data, callback);
};
obj.queryShareList = function (shareSource, callback) {
var data = {
share_source: shareSource
};
oneData.requestOneApi(manifest.getApi("lists"), data, callback);
};
obj.deleteShare = function (shareId, callback) {
var data = {
share_id: shareId,
share_point: svgCrypt.getStrPoint(shareId)
};
oneData.requestOneApi(manifest.getApi("delete"), data, callback);
};
return obj;
});
container.define("shareLog", ["config", "calendar", "constant", "api"], function (config, calendar, constant, api) {
var obj = {
name: "share_list",
modes: {
LOCAL: "local",
ONLINE: "online"