微信公众号文章里的视频怎么下载?教你用程序获取与下载

想要了解如何从微信公众号文章中下载视频吗?市面上推荐的下载工具让人等得焦急。那么,这篇文章将为你详细介绍,从技术层面入手,如何获取并下载这些视频内容。

微信视频下载需求背景

现在,微信平台上充斥着各种引人入胜的视频内容,大家普遍有了保存下来的愿望。有的人是看中了教学视频,希望能够随时拿出来学习;还有的人则是被那些有趣的生活片段吸引,想要保留下来与他人分享。在知乎上,关于如何下载这些视频的问题引起了广泛的关注,许多人都在寻求简单高效的方法。然而,许多推荐的下载工具操作复杂,或者存在安全隐患。

基本手动下载法

若仅需下载某篇文章中的视频,步骤相当简便。首先,您需要复制该文章的链接,接着在谷歌浏览器中将其粘贴打开。找到视频后,在视频右下角点击全屏按钮。随后,再次点击右下角的三个点,就会出现下载选项,点击即可完成下载。对于诸如新闻类公众号发布的视频,这种方法同样适用,可以轻松实现下载。

F12查看法

您可以通过F12键查看视频标签或数据请求信息。在阅读公众号文章时,先按F12键,随后在出现的开发者工具中查找video标签,那里包含了视频的相关资料。若要查看数据请求,您可以找到视频的原始链接,进而下载视频。这种技巧适合对编程有一定认识的人,有助于分析视频的来源。

程序获取视频思路

在运用程序处理视频方面,我们已能完成诸如登录、签到等操作。尽管作者认为这些操作技术含量不高,但他仍旧坚持进行,以此为基础为后续研究做准备。接下来,作者打算研究如何搜集所有公众号的所有文章,这些数据将为大数据分析和内容整合提供必要的支持。

/**
 * 小爬虫。
 * 目标:
 * 将微信公众号的视频下载下来,将文章保存PDF。
 * 
 * 问题:如果等待资源文件全部加载完毕后,才打印PDF。
 * 
 * 后续计划:
 * 获取某公众号内所有的文章地址,并进行轮询获取所有视频/文章PDF。
 * --微信。
 */
const puppeteer = require('puppeteer');
const path = require('path');
const fs = require('fs');
const helper = require('think-helper');//创建目录api
const axios = require('axios');
const folder = __dirname;
let url = `https://mp.weixin.qq.com/s/fwY6FPFCfgdJNTd22qqjKg`;
// let url = `https://mp.weixin.qq.com/s?__biz=MjM5MDAwNTk0MA==&mid=2653094471&idx=1&sn=8f430a2f1764714815ee9f523091b88b`;
function wsf(rs,ws){
    return new Promise((r,j)=>{
        rs.pipe(ws);
        ws.on('close',e=>{
            r();
        })
    });
}
(async function(){
    let browser = await puppeteer.launch({
        headless : true,
        executablePath : 'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe'
    });
    console.log(`开启新页面:[${url}]`);
    const page = await browser.newPage();
    let asyncArr = [];
    page.on('response',async (res)=>{
        try{
            let json = await res.json();//
            if(json && json.url_info){
                console.log(`获取到异步视频数据.`);
                asyncArr = asyncArr.concat(json.url_info);
            }
        }catch(e){}
    })
    console.log(`等待页面数据请求加载完成。`)
    await page.goto(url,{
        waitUntil : 'networkidle2'//请求结束
    });
    //url
    let videoArr = await page.evaluate(()=>{
        return $('video').get().map(t=>{
            return $(t).attr('src');
        })
    });
    
    //获取公众号信息
    let name = await page.evaluate(()=>{
        return $('.account_nickname_inner').length > 0 ? $('.account_nickname_inner').text() : $('.rich_media_meta_nickname #js_name').text();
    });
    let title = await page.evaluate(()=>{
        return $('.common_share_title').length > 0 ? $('.common_share_title').text() : $('.rich_media_title').text();
    });
    name = name.trim();
    title = title.trim();
    console.log(`获取到公众号信息:[${name}-${title}]`)
    //创建目录
    let folderPath = path.join(folder,name,title);

图片[1]-微信公众号文章里的视频怎么下载?教你用程序获取与下载-东山笔记

helper.mkdir(folderPath);//创建目录 //对视频做处理。 let vr = []; vr =vr.concat(videoArr.map(t=>{ let u = new URL(t); let fileName = title+path.extname(u.pathname); let filePath = path.join(folderPath,fileName); return { title : fileName, filePath : filePath, url : t } })); vr = vr.concat(asyncArr.map(t=>{ let u = new URL(t.url); let fileName = t.video_quality_wording +'-'+ title+path.extname(u.pathname); let filePath = path.join(folderPath,fileName); return { title : fileName, filePath : filePath, url : t.url } })); console.log(`开始准备下载视频文件`); for(let video of vr){ console.log(`开始下载视频:[${video.title}]`) await axios.get(video.url,{ responseType : 'stream' }).then(async rs=>{ await wsf(rs.data,fs.createWriteStream(video.filePath)); }) } //将页面滚动到最底部 await page.evaluate(()=>{ $('html').get(0).scroll= $('html').get(0).scrollHeight }); console.log('等待资源加载.....') // await page.evaluate(function(){ // let timeLimit = 60 * 1000; // return new Promise((r,j)=>{ // let isLoaded = true; // let start = +new Date(); // let t = setInterval(function(){ // $('img').get().forEach(t=>{ // var img = $(t).attr('src'); // var pimg = $(t).data('src'); // if(img.indexOf(pimg) > -1){ // isLoaded = isLoaded && true; // }else{ // isLoaded = isLoaded && false; // } // }) // if(isLoaded || (+new Date()) - start > timeLimit){ // clearInterval(t); // r(); // } // },500); // }) // }); //pdf console.log(`保存文章到PDF`) await page.pdf({ path : path.join(folder,name,title,title+'.pdf'), format : 'A4', printBackground : true }); console.log(`关闭浏览器`); await browser.close(); process.exit(0); })();

代码编写情况

代码的编写与调试耗时未超过一小时。尽管开发过程并没有遇到太多难题,却遭遇了资源懒加载的困扰。代码需要完成识别公众号文章中的视频,并提取出下载链接的功能,同时在多种不同的文章环境中进行调试。不过,目前尚未找到有效的解决方案,因此暂时将这个问题放到了一边。

未来计划安排

打算抽出时间,将这款可以下载微信公众号视频的小工具开发成服务,并放置在我的博客工具栏中。随后,我会观察其使用情况,若用户反馈良好,我将继续对功能进行升级。目的是让更多有此需求的人,能够通过访问我的博客轻松获取到这个工具,满足他们下载公众号视频的愿望。

在下载公众号文章中的视频时,大家是否遇到了一些棘手的问题?欢迎点赞、转发这篇文章,并在评论区与我们分享你们的经历!

© 版权声明
THE END
喜欢就支持一下吧
分享