浏览器抓取网页(浏览器抓取真实直播源地址(纯前端解析)() )
优采云 发布时间: 2021-10-31 04:06浏览器抓取网页(浏览器抓取真实直播源地址(纯前端解析)()
)
浏览器抓取真实直播源地址(纯前端JS解析)
网上搜索各种平台的直播源地址满天飞,但也经常有失败的时候,因为官方会定期升级系统修改各种参数或链接,使直播源不永久,所以我们的人民一直提倡教导他人。最好教人如何钓鱼。与其把直播源给别人,还不如教大家如何爬取直播源,哪怕失败了。
0. 前言
业余时间喜欢用虎牙看直播,所以第一时间想到的就是怎么抢虎牙的直播源。
爬取之前需要了解一下直播视频源的分类和区别,可以自己了解hls、flv、m3u8等知识。
Tips:本教程只教你如何使用前端调试技巧和基本的爬虫操作。它不用于商业用途。
1. 浏览器爬取过程
首先打开虎牙官网,找到*敏*感*词*:这里是你使用的移动端的网页(因为移动端简单)
我随手读了一遍。没有ajax请求,所以地址必须和页面一起带进来。现在直播的网页大多是SSR(服务端渲染),所以只能去页面源码中查找:
好人!直接找了一个我很想寻址的liveLineUrl,就是m3u8的地址:
在线m3u8播放测试网站:
这个网站可以测试播放源是否好,加油!尝试一下!
这是完美的!
但有那么简单吗?
我尝试了我经常看的*敏*感*词*【Let's Watch】看电影什么的,结果:
这就是正在发生的事情。. . 然后对比发现问题前后的两个链接,以下是【一起看】的链接:
然后想到liveLineUrl参数不是全局变量,控制台打印出来看看,然后仔细对比发现参数变了,其中一个fm参数变成了seqid:
先试试看控制台打印是否可以播放:
OK,司马懿出来了,现在只需要分析破解参数了。
2. 参数分析
Ctrl + Shift + F 搜索liveLineUrl,然后在这里找到js处理url,打个断点调试看看如何处理:
断点进入Object(m.default)(window.liveLineUrl),可以看到这里是处理参数的地方,最后返回的是解析后的参数字符串:
我整理了一下解析函数,重新实现了:
function parseUrl(url){
let params = url.split("?")[1];
params = params.split("&");
let paramsObj = {};
for (let i = 0; i {
y += `&${e}=${others[e]}`
});
return `${mainUrl}?wsSecret=${newWsSecret}&wsTime=${wsTime}&u=0&seqid=${time}${y}`;
}
其中用到了Base64和MD5相关的函数:
<p>// md5下载:https://raw.githubusercontent.com/emn178/js-md5/master/src/md5.js
let Base64 = {
_keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
encode: function(e) {
var t = "";
var n, r, i, s, o, u, a;
var f = 0;
e = Base64._utf8_encode(e);
while (f > 2;
o = (n & 3) 4;
u = (r & 15) 6;
a = i & 63;
if (isNaN(r)) {
u = a = 64
} else if (isNaN(i)) {
a = 64
}
t = t + this._keyStr.charAt(s) + this._keyStr.charAt(o) + this._keyStr.charAt(u) + this._keyStr.charAt(a)
}
return t
},
decode: function(e) {
var t = "";
var n, r, i;
var s, o, u, a;
var f = 0;
e = e.replace(/[^A-Za-z0-9+/=]/g, "");
while (f > 6 & 63 | 128);
t += String.fromCharCode(r & 63 | 128)
}
}
return t
},
_utf8_decode: function(e) {
var t = "";
var n = 0;
var r = c1 = c2 = 0;
while (n
虎牙直播
To view this video please enable JavaScript, and consider upgrading to a web browser that
supports HTML5 video
let Base64 = {
_keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
encode: function(e) {
var t = "";
var n, r, i, s, o, u, a;
var f = 0;
e = Base64._utf8_encode(e);
while (f > 2;
o = (n & 3) 4;
u = (r & 15) 6;
a = i & 63;
if (isNaN(r)) {
u = a = 64
} else if (isNaN(i)) {
a = 64
}
t = t + this._keyStr.charAt(s) + this._keyStr.charAt(o) + this._keyStr.charAt(u) + this._keyStr.charAt(a)
}
return t
},
decode: function(e) {
var t = "";
var n, r, i;
var s, o, u, a;
var f = 0;
e = e.replace(/[^A-Za-z0-9+/=]/g, "");
while (f > 6 & 63 | 128);
t += String.fromCharCode(r & 63 | 128)
}
}
return t
},
_utf8_decode: function(e) {
var t = "";
var n = 0;
var r = c1 = c2 = 0;
while (n