需要处理的页面按F12,出现控制台/console,粘贴进入即可
UP主投稿页面视频地址、标题及封面图片地址获取(只能获取单页)
var videoBox = document.getElementsByClassName('cube-list')[0],
liList = videoBox.getElementsByTagName('li'), // 获取投稿视频列表
str = ''; // 存储信息
[].forEach.call(liList, (item, index) => {
var aBox = item.getElementsByTagName('a')[0],
tempAddress = aBox.href, // 获取视频地址
imgBox = aBox.getElementsByTagName('img')[0];
index = ++index < 10 ? ('0' + index) : index;
str += index + ' - ' + imgBox.alt + '</br>视频地址 ' + tempAddress + '</br>封面图片地址 ' + imgBox.src.replace(/(\.[a-zA-Z]{3,4})(\@\w+.*$)/, ($0, $1) => $1) + '</br></br>';
});
document.write(str);
结果为:
- 01 - 2021年,还有人记得Fate吗?
视频地址 https://www.bilibili.com/video/BV1U44y117wu
封面图片地址 https://i1.hdslb.com/bfs/archive/9f5f62e134d2efbf863314fe211c8e72ea2bda5d.jpg - 02 - 开始拔刀!来感受剑术,体术,枪斗术的魅力吧!
视频地址 https://www.bilibili.com/video/BV1H54y1J7rJ
封面图片地址 https://i2.hdslb.com/bfs/archive/157ee605a34128f80d64cbe2f631e4b56b548f3f.jpg - 03 - 欢迎回来,京阿尼!
视频地址 https://www.bilibili.com/video/BV1rq4y1H77u
封面图片地址 https://i1.hdslb.com/bfs/archive/cca2ce13a8515caa978490d6f7f82c2b1499b421.jpg
获取B站UP上传视频封面超高清大图并进行批量下载(投稿页单页批量)
B站封面下载
- 测试浏览器:
- 360极速浏览器
- Chrome谷歌浏览器
注:代码中的page
默认是1,如果是下载一页就不用管它;如果想下载若干页,且编号连贯性,则看自己下载的是第几页就填第几页,此变量处理的仅仅是图片编号(序列号)
var videoBox = document.getElementsByClassName('cube-list')[0],
liList = videoBox.getElementsByTagName('li'),
str = '', // 整个地址
imgSrc = [], // 图片地址
imgName = [], // 图片名
page = 1; // 默认下载页数
[].forEach.call(liList, (item, index) => {
var aBox = item.getElementsByTagName('a')[0],
tempAddress = aBox.href,
imgBox = aBox.getElementsByTagName('img')[0],
tempIndex = index,
tempImgName = imgBox.alt;
index = 30* (page - 1) + 1 + index;
index < 100 ? (index < 10 ? (index = '00' + index) : (index = '0' + index)) : null;
imgSrc.push(imgBox.src.replace(/(\.[a-zA-Z]{3,4})(\@\w+.*$)/, ($0, $1) => $1));
imgName.push(index + ' - ' + tempImgName);
str += imgName[tempIndex] + '</br>视频地址 ' + tempAddress + '</br>封面图片地址 ' + imgSrc[tempIndex] + '</br></br>';
});
document.write(str);
/*base64转blob*/
function convertBase64UrlToBlob(base64){
var type = base64.split(",")[0].match(/:(.*?);/)[1];//提取base64头的type如 'image/png'
var bytes = window.atob(base64.split(',')[1]);//去掉url的头,并转换为byte (atob:编码 btoa:解码)
//处理异常,将ascii码小于0的转换为大于0
var ab = new ArrayBuffer(bytes.length);//通用的、固定长度(bytes.length)的原始二进制数据缓冲区对象
var ia = new Uint8Array(ab);
for (var i = 0; i < bytes.length; i++) {
ia[i] = bytes.charCodeAt(i);
}
return new Blob([ab] , {type: type});
}
function downloadIamge(imgSrc, imgName) {//下载图片地址和图片名
// var image = document.createElement('img'); // 创建一个IMG
var image = new Image(); // 与上方语句相同意思
// image.src = imgSrc; // 这里设置路径在chrome浏览器中可能还是会出现污染问题(本地测试),而当其在最后执行却不会
// 解决跨域 Canvas 污染问题
image.setAttribute("crossOrigin", "anonymous"); // 添加crossOrigin属性, 并给予anonymous属性值
image.onload = function () { //=>图片加载成功触发这个事件
let canvas = document.createElement("canvas");
canvas.width = image.width;
canvas.height = image.height;
let context = canvas.getContext("2d");
// context.drawImage(image, 0, 0);
context.drawImage(image, 0, 0, image.width, image.height);
let url = canvas.toDataURL("image/jpeg", 1); //得到图片(画布)的base64编码数据, 0~1设置清晰度
url = window.URL.createObjectURL(convertBase64UrlToBlob(url));
let a = document.createElement("a"); // 生成一个a元素
let event = new MouseEvent("click"); // 创建一个单击事件
console.log(imgName);
// imgName[1] = '02 - 【空空如也】无损音质 立体声,9.9的耳机准备好了吗?'; 下载文件名称中包含 【.】 时,会出现后缀异常(不添加图片后缀的问题)
a.download = (imgName.replace(/\./g, '【dian】')) || "bilibili_Photo"; // 设置图片名称,处理 【.】点的问题
a.href = url; // 将生成的URL设置为a.href属性
a.dispatchEvent(event); // 触发a的单击事件
window.URL.revokeObjectURL(url);
};
image.src = imgSrc;
};
var count = 0,
maxCount = imgSrc.length;
var timer = setInterval(() => {
if (count == maxCount) {
console.log('一共下载 ' + count + ' 张封面');
clearInterval(timer);
return;
}
downloadIamge(imgSrc[count], imgName[count]);
count++;
}, 1000); // 1S下载一张