chrome网页视频抓取(和入门ffmpeg开FFmpeg官方网站有了神器何不自己写个工具)
优采云 发布时间: 2021-10-06 04:33chrome网页视频抓取(和入门ffmpeg开FFmpeg官方网站有了神器何不自己写个工具)
前几天有同学说想下载网站的视频,找不到连接。他问我是否可以做些什么。当时觉得应该很简单,就说抽空看看。然后它分析了目标网页,并试图从网页的源代码中找到链接,但失败了。F12调出开发者工具,进入NetWrok,看到网页是通过ajax发起的xhr请求获取的视频连接。难怪页面元素里没有下载地址。请求是一个 m3u8 格式的文件。我查了一下这是一个支离破碎的流媒体。文件,然后到处找工具下载这个格式文件,不是很理想。很多都是分片后直接下载的ts文件,但是这个网站 已加密,无法直接播放。终于找到了ffmpeg视频插件神器,视频转码、剪切、合并、播放。不用说,它还支持多个平台。
FFmpeg 介绍和入门 FFmpeg
ffmpeg开启FFmpeg官方网站
有了神器,何不自己写个工具自己下载。当您准备好这样做时,您首先会被如何获得连接的问题所阻碍。本来只是想写个小爬虫,爬取网页连接。结果不起作用。Ajax动态发起的请求的网页元素中没有数据,对js不熟悉。我不知道如何获得这种数据。同学们可以手动打开浏览器F12找到连接吗?这不是我的风格:) 然后继续各种搜索,得到结果,自己实现浏览器,拦截网页的所有请求,你一定会得到的。筛选后得到三个选项:
1.WebBrowser.
2.GeokoFx.
3.CefSharp.
第一次尝试WebBrowser,目标网站无法直接打开网页,于是换了谷歌浏览器,修改了UserAgent打开,但是网页没有完全显示出来,就放弃了。然后,可以直接打开GeokoFx,速度还不错,但是有些连接点击没有反应,只能放弃。最后用CefSharp测试达到了预期的目的,就是无法打开flash和H264视频。折腾了一天,官方说不支持版权问题,需要自己修改。我找到了一个修改过的库。我找到了一个支持flash和H264视频的库:
提取码:dfdr
是nupkg的安装包,查看nupkg的安装方法
然后编写代码:
获取视频地址,继承和集成默认抽象类DefaultRequestHandler就够了。
public class MyRequestHandler : DefaultRequestHandler
{
public override CefReturnValue OnBeforeResourceLoad(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback)
{
//拿到url后再判断下是不是视频文件
string url = request.Url;
}
}
然后在初始化浏览器时指定它。
chromeBrowser.RequestHandler = new MyRequestHandler(callback);
这里我从url中提取文件名,然后判断扩展名来判断是否是视频文件。不知道有没有更通用的方法。无法判断ResourceType == ResourceType.Media。在许多情况下,返回的值是 xhr。
FFmpeg部分就是直接命令行调用下,有时间再研究下这个神器的lib方式。
下面是折腾了几天的结果。
在这里可以下载、播放等操作,界面有点丑,功能实现了。
下载支持续传,但是m3u8分片文件没有保存断点,所以关闭软件后续传无法恢复,必须重启。直播流的大小无法预测,因此不显示进度,但会及时更新下载的数据大小。
一般情况下不需要下载ts文件,直接下载m3u8,程序会自动分析ts片段文件,下载完所有文件后自动合成一个mp4文件。
软件下载: 链接:
提取码:n6q4
如果还是不行,请下载安装NET Framework4.6.1