Browse Source

bilibili livestream support

master
filesite 6 months ago
parent
commit
424a429022
  1. 41
      bot/Bilibili.mjs
  2. 3
      test/scrap_test.mjs

41
bot/Bilibili.mjs

@ -39,6 +39,10 @@ class Bilibili extends HeroBot { @@ -39,6 +39,10 @@ class Bilibili extends HeroBot {
await tab.waitForLoad('DomContentLoaded', {timeoutMs: configs.heroTabOptions.timeoutMs});
await hero.waitForPaintingStable({timeoutMs: configs.heroTabOptions.timeoutMs});
let rnd_secods = 10 + parseInt(Math.random() * 10);
console.log("Sleep %s seconds...", rnd_secods);
await common.delay(rnd_secods);
//解析网页HTML数据
data.title = await hero.document.title;
//data.url = await hero.url;
@ -57,12 +61,47 @@ class Bilibili extends HeroBot { @@ -57,12 +61,47 @@ class Bilibili extends HeroBot {
}
}
//支持正在直播页面
if (typeof(data.cover) == 'undefined' || !data.cover) {
console.log('Try to get video poster...');
let videoElem = await hero.querySelector('.live-player-mounter video');
let posterDiv = await videoElem.nextSibling;
if (posterDiv) {
let styleDeclaration = await posterDiv.style;
if (styleDeclaration) {
let backgroundImage = await styleDeclaration.getPropertyValue("background-image");
//console.log('Poster element find', backgroundImage);
backgroundImage = backgroundImage.replace('url("', '').replace('")', '');
data.cover_type = common.getImageType(backgroundImage);
data.cover_base64 = backgroundImage.replace(/^data:image\/[a-z]+;base64,/i, '');
}
}
}
//支持已结束直播
if (
(typeof(data.cover) == 'undefined' || !data.cover)
&&
(typeof(data.cover_base64) == 'undefined' || !data.cover_base64)
) {
console.log('Try to get avatar...');
let avatarElem = await hero.querySelector('.blive-avatar-face');
if (avatarElem) {
let styleDeclaration = await avatarElem.style;
if (styleDeclaration) {
let backgroundImage = await styleDeclaration.getPropertyValue("background-image");
//console.log('Avatar element find', backgroundImage);
data.cover = backgroundImage.replace('url("', '').replace('")', '');
}
}
}
//get cover image's base64 data
//sample: //i1.hdslb.com/bfs/archive/ef6204c8788134064dc6b7e8cb20870f1341e604.jpg@100w_100h_1c.png
//替换成://i1.hdslb.com/bfs/archive/ef6204c8788134064dc6b7e8cb20870f1341e604.jpg@480w_270h_1c.png
if (typeof(data.cover) != 'undefined' && data.cover) {
data.cover = common.getAbsoluteUrl(data.cover);
data.cover = data.cover.replace(/@[\w]+\./ig, '@480w_270h_1c.');
data.cover = data.cover.replace(/@[\w]+\./ig, '@480w_270h_1c.'); //获取480x270尺寸图片
const response = await hero.goto(data.cover);
const imgBuffer = await response.buffer;

3
test/scrap_test.mjs

@ -94,6 +94,9 @@ import getConfigs from '../config.mjs'; @@ -94,6 +94,9 @@ import getConfigs from '../config.mjs';
url = 'https://www.bilibili.com/video/BV1ep4y1J75y/?share_source=copy_web&vd_source=00bead49a4c2df31bbf3e609d7d95899'; //pc
url = 'https://b23.tv/Lo0jIEt'; //mob
//正在直播页面
url = 'https://b23.tv/EnwbTKc';
configs.heroTabOptions.timeoutMs = 20000; //所有内容加载完成超时
configs.userAgent = configs.userAgents.mac_chrome;

Loading…
Cancel
Save