正常来说,要获取一个视频网站的 m3u8 地址,需要先用 F12 进入 developer tool,再从 Network 面板里,按照 m3u8 关键字过滤一下,最后导出 https://t.wdubo.com/20210617/YyqGH3Ne/hls/index.m3u8 之类的地址。
然而,现在网站为了防止爬虫,中间那串 YyqGH3Ne 是随机数。一个视频还好,几十集的电视连续剧,用这种方法挨个去点每一集,就很繁琐。
可以改用 Chrome Devtools Protocal 接口,用后台来控制 chrome 的 url 访问,network 监控和全自动化 url 过滤和记录。
以 chrome v88 来举例
用 chrome.exe --remote-debugging-port=9222 --disable-gpu about:blank 参数启动浏览器。
访问 http://127.0.0.1:9222/json,获取 about:blank 页面的[pageid]
用支持 websocket 的语言写一段控制代码,用 websocket 协议和 chrome 建立后台控制连接 (地址为 ws://127.0.0.1:9222/devtools/page/[pageid]
发送命令 Network.enable,让 chrome 打开所有网络监控回调(相当于 network 面板监控)
循环运行 JS 脚本 Runtime.evaluate, 参数为 document.location.href='http://视频网站.com/某电视剧 /第 1 集.html'
抓取页面里,动态产生的所有 network 事件。用正则对 url 进行过滤,保存当前的 m3u8 真实地址。
重复执行第 5 步,直到所有电视剧的所有集数保存完毕。
1
chachalover 2021-07-13 09:12:36 +08:00
强
|
2
supermoonie 2021-07-13 09:26:21 +08:00 via iPhone 1
巧了,我做的是封装 cef,直接监听网络调用
|
3
3dwelcome OP @supermoonie cef 以前也玩过,接口很多,特别是和 C++跨语言调用,挺有意思的。
貌似监听网络,有一大堆方法。可以走 http/https proxy 代理,写 chrome 扩展监听的,有早期 chrome://net-internals,还有直接用 chrome devtool for devtool,把过滤后的 network 面板 url 列表数据导出来的,五花八门。 |
4
supermoonie 2021-07-13 13:27:22 +08:00 via iPhone
@3dwelcome 其实 cdp 的实现现在很多了,puppeteer 可能是比较有名的了,其他语言也都有实现,不用自己写
|