JSjavascript获取B站封面图片超高清批量下载原图

需要处理的页面按F12,出现控制台/console,粘贴进入即可

UP主投稿页面视频地址、标题及封面图片地址获取(只能获取单页)

测试地址3

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站封面下载

测试地址3

  • 测试浏览器:
    - 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下载一张
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值