使用 chrome devtools protocol,来抓取视频网站的 m3u8 地址。

2021-07-13 01:59:18 +08:00
 3dwelcome

正常来说,要获取一个视频网站的 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 来举例

  1. 用 chrome.exe --remote-debugging-port=9222 --disable-gpu about:blank 参数启动浏览器。

  2. 访问 http://127.0.0.1:9222/json,获取 about:blank 页面的[pageid]

  3. 用支持 websocket 的语言写一段控制代码,用 websocket 协议和 chrome 建立后台控制连接 (地址为 ws://127.0.0.1:9222/devtools/page/[pageid]

  4. 发送命令 Network.enable,让 chrome 打开所有网络监控回调(相当于 network 面板监控)

  5. 循环运行 JS 脚本 Runtime.evaluate, 参数为 document.location.href='http://视频网站.com/某电视剧 /第 1 集.html'

  6. 抓取页面里,动态产生的所有 network 事件。用正则对 url 进行过滤,保存当前的 m3u8 真实地址。

  7. 重复执行第 5 步,直到所有电视剧的所有集数保存完毕。

1976 次点击
所在节点    Chrome
4 条回复
chachalover
2021-07-13 09:12:36 +08:00
supermoonie
2021-07-13 09:26:21 +08:00
巧了,我做的是封装 cef,直接监听网络调用
3dwelcome
2021-07-13 10:03:46 +08:00
@supermoonie cef 以前也玩过,接口很多,特别是和 C++跨语言调用,挺有意思的。

貌似监听网络,有一大堆方法。可以走 http/https proxy 代理,写 chrome 扩展监听的,有早期 chrome://net-internals,还有直接用 chrome devtool for devtool,把过滤后的 network 面板 url 列表数据导出来的,五花八门。
supermoonie
2021-07-13 13:27:22 +08:00
@3dwelcome 其实 cdp 的实现现在很多了,puppeteer 可能是比较有名的了,其他语言也都有实现,不用自己写

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/789151

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX