Node.js使用puppeteerjs提取网页中的视频地址zhao的专栏

需要将网页中的视频地址提取出来。作为前端开发人员的惯性思维,看到这个网页的html结构,这个不是很简单嘛,一行代码就搞定:document.querySelector('videosource').src

嘻嘻,大功告成,准备摸鱼~

等等!这个只是在浏览器的控制台中拿到了视频的地址,但是如何转化成为提供一个接口,通过接口返回这个地址呢?初步猜想,使用get请求获取网页的html,然后分析dom结构,解析出video标签。

直接通过get请求页面的地址获取到的内容并不是我们在浏览器所看到的内容。目前的网页大多都是动态网页,即页面最终呈现的内容是通过加载js后执行脚本动态拼接的,因此页面中的video标签并不是直接从服务端拼接好的。

浏览器加载网页的请求截图,没有直接返回dom结构,全是加载一堆js和css文件

并且!很多网站都做了防爬措施,直接请求页面的地址会返回一个中间页面,例如抖音和微博的视频详情页面,直接请求会返回一个类似于认证的页面,初步分析了这个页面,这个中转页面应该是判断有没有相应cookie的信息,如果没有相应的信息,就会给浏览器设置cookie之类的信息,最后会走一个window.location.reload();让页面刷新一次(微博会直接走到一个SinaVisitorSystem的页面不会直接跳转到详情页面)。这个脚本在浏览器中会自动执行,因此会重新加载一次,看到最终的详情页面。但是get请求仅仅是获取到了中转页面的html,并没有走到真正的详情页面。

哎呀!连最终的网页信息都拿不到,怎么可能拿到页面视频地址呢?这下可不能愉快的摸鱼了

通过调研后决定采用Node.js+Puppeteer来实现这个功能,本文主要记录项目的实现思路和开发部署中遇到的难点及其解决方案,仅供学习参考。

参考资料:

决定使用puppeteerjs后里面在windows环境下进行开发,windows环境为Nodev12.16.2,puppeteerjsv2.1.1

puppeteerjs的最新版为13.1.1。但是puppeteerjsv3.0版本及以上需要Nodev10及以上,因为我本地的开发环境Node为v12,服务器上的Node为v8,因此本地开发没问题,但是服务器上一直部署不成功,且服务器上面有很多其他项目都是基于nodev8版本的,因此服务器上的node版本不宜升级。为保持和服务器版本一致,windows环境下的puppeteerjs也使用2.1.1版本;

直接上代码server2.js

puppeteer.launch中的headless默认true,如果设置为false,会打开一个Chromium加载网页,并且能直接调试网页!

awaitpuppeteer.launch({headless:false,//是否无头浏览});

拿到了html代码我们怎么进一步获取video标签呢?

awaitpage.waitForTimeout(2000);//延时2s加载页面puppeteer2.1.1使用waitFor^13.0.1以上使用waitForTimeoutconstvideoSrc=awaitpage.$eval('videosource',(el)=>{letsrc='';if(el&&el.src){src=el.src;}returnsrc;});拦截接口部分页面是直接通过请求接口获取到的视频地址,对于这种网页我们可以使用上面的方法,等页面加载完毕后分析dom,但是查阅puppeteer的文档时发现可以直接拦截接口,获取接口的返回信息,因此,如果我们针对指定的详情,知道其请求规则,可以直接通过接口响应获取相应的数据。

//注册响应监听事件page.on('response',async(response)=>{if(response.ok()){constrequest=response.request();constreqUrl=request.url();if(reqUrl.indexOf('/api/getHttpVideoInfo.do')>-1){//拦截/api/getHttpVideoInfo.do接口constrespData=awaitresponse.json();constvideo=respData.video;if(video&&video.validChapterNum>0){constcurrentChapter=video[`chapters${video.validChapterNum}`];if(currentChapter&¤tChapter.length>0&¤tChapter[0]&¤tChapter[0].url){resolve(currentChapter[0].url)}}}}})这种方式是指针对有明确接口,切能拿到相应的请求参数的页面使用!

完整的代码已提交到github,链接在后面给出

打开本地网页访问:localhost:18000

服务端环境为linux环境,系统为CentOS-8,Node.js版本为v8.11.3,Linux环境和windows环境部署的时候有点区别,特别是安装puppeteer时需要注意安装puppeteer时会报以下错误

ERROR:FailedtodownloadChromiumr722234!Set"PUPPETEER_SKIP_CHROMIUM_DOWNLOAD"envvariabletoskipdownload.Error:EACCES:permissiondenied,mkdir'/opt/video-url-analysis/node_modules/puppeteer/.local-chromium'

因为安装puppeteer时会安装Chromium,需要权限,因此在linux环境下使用以下命令安装

npminstallpuppeteer@2.1.1--unsafe-perm=true--allow-root安装完毕后启动程序,成功运行并抓取网页视频!

linux下启动浏览器headless需要设置为true,添加args参数

constbrowser=awaitpuppeteer.launch({headless:true,//是否启用无头浏览默认为trueargs:['--no-sandbox','--disable-setuid-sandbox']});其他异常错误:1.Failedtolaunchthebrowserprocess

Failedtolaunchthebrowserprocess...errorwhileloadingsharedlibraries:libXss.so.1:cannotopensharedobjectfile:Nosuchfileordirectory应该是系统缺少某些库或者组件(我这边使用命令后解决了这个问题)

sudoyum-yinstalllibXScrnSaver-1.2.2-6.1.el7.x86_64或者直接重新安装chromium,手动安装chromium后解决问题

sudoyuminstall-ychromium2.使用yum安装软件依赖出错,一直提示找不到软件包

[root@localhostvideo-url-analysis]#sudoyuminstall-ychromium上次元数据过期检查:0:00:47前,执行于2022年01月20日星期四21时35分27秒。未找到匹配的参数:chromium错误:没有任何匹配:chromium原因是CentOS8没有安装epel源的问题,安装epel源后问题解决:yuminstallepel-release

1.安装依赖

npminstall2.本地开发

npmrundev打开本地网页访问:localhost:18000

windows环境下开发比较顺利,由于本人是前端切图仔,服务器接触较少,所以linux服务端部署遇到的问题较多,因此记录一下解决问题的过程,方便后续开发者遇到问题能够顺利解决。服务端知识有所欠缺,如有不足,还请海涵!

THE END
1.怎么把网页视频提取出来@信息技术学习助手怎么把网页视频提取出来 信息技术学习助手 想要从网页中提取视频,你可以尝试以下几种方法: 使用浏览器内置功能: 某些浏览器(如谷歌Chrome)可能内置了视频下载功能。当你在网页上播放视频时,浏览器可能会自动启动视频下载工具,稍等片刻,视频就会自动保存到你的电脑本地。 安装第三方插件: 你可以为https://agents.baidu.com/content/question/101373f248a15f3173183c49
2.怎么提取网页上的视频?二、怎么提取网页上的视频和音频? 如果想要提取网页视频中的背景音乐,首先把这个视频下载在手机里,然后再安装一个“音频提取器”APP,使用里面的提取视频中音频功能,就可以把视频中的背景音乐给提取出来了,可以按照以下步骤操作,因为时间关系,视频已经下载到了手机,(注意:提取音频的前提是要能下载到手机的视频)。; https://tool.a5.cn/article/show/73312.html
3.怎么把网页视频的音频提取出来怎么把网页视频的音频提取出来 参考内容一: 1. 打开想要提取音频的网页。 2. 点击网页界面右上方的箭头图标。 3. 在弹出的框中选中并点击,将文件的后缀mp4改为MP3。点击“下载”。 参考内容二: 1. 打开360浏览器,在收藏栏找到“管理”,点击“添加”,在360应用市场搜索栏中输入“FLVCD”。https://www.ui0.cn/a/k392ep58e.html
4.如何提取网页中的视频edge提取网页视频如何提取网页中的视频 本文介绍了如何通过右键检查视频、安装AIX智能下载插件以及使用开发者模式(包括网络模块监控和筛选)来下载网页上的视频资源,适用于公开数据。同时提供了两种方法:直接在开发者模式下找到视频链接,或者利用筛选功能寻找特定格式的文件。 摘要由CSDN通过智能技术生成https://blog.csdn.net/Tw2054840290/article/details/133801609
5.如何快速提取微信公众号文章中的视频?1、搜索【速排小蚂蚁编辑器】并打开网页,在左侧菜单栏找到【工具宝箱】-【微信视频提取】; 2、点击【微信视频提取】,将公众号文章的链接粘贴在输入框,并点击提取,就得到了视频的链接啦!还可以直接在编辑文章的时候插入视频,或者直接将视频下载在电脑里。怎么样,这个方法是不是很简单?https://m.xmyeditor.com/help/702.html
6.www.scmc?要在实验室里一个个将有效成分与这特殊的大麦种子结合; ?要在试管中培育成幼株,再移栽,整个过程全部由科学家人工操作; ?提取大麦的技术来自蓓欧菲母公司ORF,由3位冰岛科学家创办的生物科技公司,也是全球知名的医学原料研发企业,自身硬实力不是随便能模仿来的。大麦http://www.scmc-xa.com/xxxr441783
7.教程抓取网页内视频的五种方法腾讯云开发者社区今天介绍几种抓取网页内视频的方法(其实这个教程我想昨天发的,结果shsh2刷机耽搁太久了,被拖延到今天) 教程以公众号里的“【安卓】备用机通知转发到主力机微信”开始 暂时想到算是五种办法吧,但是五种里可能有类似的办法,也就是用了同一个原理 电脑篇 https://cloud.tencent.com/developer/article/1674538
8.之前使用爬虫,可以获褥手视频网站的视频,输入用户主页地址提取照片信息 可以看出以列表形式存储 ok,我再把数据库字段和主键创建好,然后把爬虫的代码封装为类,就可以构建网页了 好吧,我之前获取的是用户id,不是快手id。可以先爬取用户id主页信息,获取快手id,然后再通过快手id爬取全面的视频信息和照片。 爬虫代码封装成类 https://gitee.com/liangxinixn/ksDjango
9.电脑提取网页视频的软件手机提取网页视频工具的app电脑提取网页视频的软件,很多时候我们观看网页视频,想下载网页视频却找不到下载按钮,其实很简单,只要使用网页视频下载软件即https://www.duote.com/zt/soft9690/index.html
10.360浏览器电脑版下载最新360浏览器pc版免费下载安装问:360安全浏览器没有Internet选项,怎么提取网页上的视频和音频? 答:您可以在扩展中心安装FLVCD扩展 添加完成后,右键点击视频链接,选择"用FLV解析该链接的视频" 问:怎么更改浏览器的字体?我要让网页字体使用微软雅黑 答:您可以在扩展中心安装页面字体强制使用雅黑的插件! 问:怎么更改网页背景颜色为绿豆沙色? https://m.onlinedown.net/soft/613750.htm
11.使用360浏览器提取网页视频的详细步骤及方法使用360浏览器提取网页视频的具体步骤如下: 1、首先我们打开电脑上的浏览器,打开一个包含视频的网页。 2、然后我们在网页上点击键盘上的F12,浏览器网站的右侧就会显示控制台。 3. 按F5 刷新。可以看到旁边有一个文件。只要打开它。 4.我们右键另存为保存视频。 https://m.bjhwtx.com/h-nd-293266.html
12.?电脑怎么提取网页视频?电脑怎么提取网页视频 平时上网的时候,看到有趣或者对自己有用的视频就想保存下来。那么如何把网页视频下载到电脑本地呢?那可太简单了!下面小编分享4种简单有效的网页视频下载方法,一看就会,轻松下载各大网站视频! 方法一:网页源代码用谷歌 1、浏览器视频网页,点击播放这个视频。鼠标移动到正在播放的视频上,单击https://www.callmysoft.com/support/2683.html
13.电脑怎么提取网页视频电脑怎么提取网页视频 ┊主题 作者/ 阅读 最后更新 swf怎么转换成gif格式 swf转gif用什么软件 swf影片格式转换为gif动画 qiaoru 1634 05月27日 网页视频下载到本地 如何从优酷网下载视频MP4格式 qiaoru 1698 09月10日 网页视频下载工具哪个好 网页视频下载软件 阑珊233 5387 08月21日 淘宝主图视频怎么下载到http://www.leawo.cn/space-mtag-tagid-10386.html
14.腾讯客服同时,我们追求科技向善,将社会责任融入平台及服务之中,推出了「腾讯未成年人家长服务平台」,通过多种方式赋能家长,协助家长引导孩子健康上网、提升未成年人网络素养;打造了「腾讯卫士」小程序,通过受理用户举报,打击 QQ/微信等社交网络上的违法违规账号,与用户、国家相关部门合作,共筑网络清朗环境。https://kf.qq.com/
15.VideoCacheView64位(视频缓存提取工具)V2.9.7.0官方版VideoCacheView是一款简单实用的视频缓存提取工具,可自动扫描谷歌、百度等各种主流浏览器的缓存,并快速、智能的将网页视频中的各种视频提取出来,同时还支持提取图片、音频。 139.52 KBM | 07-13 下载介绍 VideoCacheView是一款简单实用的视频缓存提取工具,可自动扫描谷歌、百度等各种主流浏览器的缓存,并快速、智能的将网页https://wap.wmzhe.com/soft-30087.html
16.如何提取视频如何提取视频 ①打开微信公众号平台,在【素材库】-【视频】中添加并上传视频 ②新建一篇图文,点击微信公众号菜单栏上方的【视频】,将刚刚上传的视频添加到文章中,完善标题和封面图后保存https://www.135editor.com/books/chapter/1/572