教你怎么在电脑端下载西瓜视频源文件

这篇具有很好参考价值的文章主要介绍了教你怎么在电脑端下载西瓜视频源文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

家里长辈平时爱用西瓜视频,看到喜欢的广场舞就会收藏,甚至想下载到视频机,晚上去广场跟着跳🤣。

这时计算机专业出身的我,就派上用场了。不废话,直接上手:

  1. 打开西瓜视频官网,搜索到想要的视频
  2. 打开 F12(开发者工具)
  3. 切换到移动端模式,刷新页面
  4. 在 Network 面板下,筛选 Media ,找到原视频的链接,右键在新标签页打开
  5. 将上述视频另存为即可👏
    教你怎么在电脑端下载西瓜视频源文件,前端,西瓜视频

使用脚本自动下载

人工操作多了就容易烦躁,于是用puppeteer做了个小工具,直接在命令行中传入视频连接进行下载

import chalk from "chalk"
import puppeteer from "puppeteer"
import dayjs from "dayjs"
import { get } from 'https'
import { createWriteStream } from "fs"

const iphonUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1"

const urls = process.argv.splice(2).filter(v=>!!v)

if(urls.length == 0){
    console.error(chalk.red(`ERROR:请输入 URL`))
    process.exit(-1)
}

const log = (...ps)=> console.debug(`${chalk.magenta(dayjs(new Date).format("HH:mm:ss"))} `, ...ps)
/**
 * 下载远程资源到本地
 * @param {String} remoteUrl
 * @param {String} filename - 本地文件名
 * @returns {Promise}
 */
const downloadToFile = (remoteUrl, filename)=>new Promise((ok)=>{
    get(remoteUrl, res=>{
        const stream = createWriteStream(filename)
        res.pipe(stream)

        stream.on('finish', ()=>{
            stream.close()
            ok()
        })
    })
})
/**
 * 线程等待
 * @param {Number} seconds - 秒,默认 3
 * @returns {Promise}
 */
const sleep = (seconds=3)=> new Promise(ok=> setTimeout(ok, seconds*1000))
/**
 * 根据分享地址获取视频页面的真实地址
 * @param {String} url - 格式为 https://v.ixigua.com/xxxx/
 * @returns {Promise<String>}
 */
const getRealUrl = url=> new Promise(ok=> get(url,{headers:{"user-agent": iphonUserAgent }}, res=> ok(res.headers.location.split("/?").shift())))


const browser = await puppeteer.launch({headless: true})
const page = await browser.newPage()
await page.setExtraHTTPHeaders({
    'User-Agent': iphonUserAgent,
    'Referer': "https://m.ixigua.com/"
})

console.info(`本次下载地址 ${chalk.magenta(urls.length)}`)
/**
 * 三类视频地址:
 * 1、https://m.ixigua.com/video/7289329592371053071    手机版地址
 * 2、https://www.ixigua.com7289329592371053071         PC版地址
 * 3、https://v.ixigua.com/idPeuNAa/                    分享出来的短链接
 */
for (let url of urls) {
    console.group(url)
    if(url.startsWith("https://v.ixigua.com") || url.startsWith("https://www.ixigua.com/")){
        url = await getRealUrl(url)
        if(url.startsWith("//m."))  url = `https:${url}`
        log(`解析真实地址 ${url}`)
    }

    log(`开始加载地址 ${url}`)
    await page.goto(url)

    await sleep(1)

    let title = await page.title()
    log(`读取标题:${title}`)

    let video = await page.waitForSelector("video")
    if(video){
        let src = await video.getProperty('src')
        src = await src.jsonValue()
        log(`视频地址 ${src}`)

        // 文件名删除空格、emoji、-西瓜视频这几类
        let filename = `${title.replace(" ", "").replace(/\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDE4F]/g, "").replace("-西瓜视频", "").trim()}.mp4`
        log(`即将保存资源到 ${filename}`)

        let started = Date.now()
        await downloadToFile(src, filename)
        log(`原视频下载完成(耗时 ${((Date.now()-started)/1000).toFixed(4)} 秒) ^.^\n`)
    }
    else{
        log(`找不到视频元素,跳过`)
    }
    console.groupEnd()
}

await page.close()
await browser.close()

console.debug(chalk.magenta(`\nBye!`))

process.exit(0)

使用方式:

  1. 将上述代码保存到index.js
  2. 执行 npm i puppeteer chalk dayjs
  3. 执行 node . {视频地址,多个用空格隔开}

教你怎么在电脑端下载西瓜视频源文件,前端,西瓜视频文章来源地址https://www.toymoban.com/news/detail-754211.html

到了这里,关于教你怎么在电脑端下载西瓜视频源文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • VScode中添加头文件和源文件的方法

            在正常情况下,若同一文件夹下若头文件、源文件、和主要代码在同一文件夹下,则可以正常运行程序。 如图(此为Visual Studio 示例):   编译结果(无报错):     但在VScode中,同样的使用方式会产生报错。 如下:    main.c:  myheadfile.h: myheadfile.c:    报错如

    2023年04月09日
    浏览(43)
  • Visual Studio C++ 的 头文件和源文件

    在Visual Studio C++中,头文件(Header Files)和源文件(Source Files)是两种不同的文件类型,用于组织和管理C++代码。 头文件(Header Files): 后缀名为 .h 或 .hpp 的文件,例如 example.h 。 包含类、结构体、函数的声明、宏定义和类型定义等。 通常用于存放函数原型、类的声明、常

    2024年02月07日
    浏览(53)
  • CMake获取目录下所有源文件

    1、aux_source_directory指令         aux_source_directory( dir variable ) 比如:         aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} ALL_SOURCE) , 这样将当前目录所有的源文件(.cpp 和.c文件)都放到了ALL_SOURCE变量中,但是头文件并没有被包括进去,若在头文件有函数的实现部分,采用这

    2024年02月15日
    浏览(46)
  • 【C++】源文件.cpp和头文件.h分离编程

    将C++代码分为头文件(.h)和源文件(.cpp)的做法有以下几个好处: 模块化和代码组织:将函数和类的声明(包括函数原型、类的成员和属性等)放在头文件中,将函数和类的实现(具体的函数逻辑、成员函数的定义等)放在源文件中。这种分离有助于对代码进行模块化和组

    2024年02月09日
    浏览(37)
  • Linux--多个源文件编译成同一个可执行文件

    写法一:不推荐 写法二、推荐 $@: 代表目标文件    $^: 代表生成目标文件的所有源文件

    2024年02月15日
    浏览(60)
  • Vivado中如何修改IP源文件

    前一篇文章是通过改变JESD204B IP的设置,在Shared Logic里勾选in example design,来避免共用输入时钟的问题。那么还有没有别的办法呢?有没有更直接点的实现方式呢? 答案是肯定的:可以 直接修改IP,将IBUFDS从IP里移出去 ,放到外面就可以共用了。修改IP是一个比较复杂的办法,

    2024年02月11日
    浏览(83)
  • Lua之Lua源文件批量转换为luac字节码文件

    准备的工具:luac.exe  CSDN https://mp.csdn.net/mp_download/manage/download/UpDetailed Unity版:

    2024年02月11日
    浏览(37)
  • 【STM32学习笔记】(5)—— STM32工程添加源文件和头文件

    STM32的工程文件构成较为复杂,同时为STM32工程文件添加源文件和头文件也是较为复杂的,下面就由此文章来介绍怎么给STM32工程添加源文件(.c)与头文件(.h),以跑马灯实验为例。 1、在Template工程文件夹下面新建一个 HARDWARE 的文件夹,用来存储以后与硬件相关的代码,然

    2024年02月16日
    浏览(46)
  • Unity Netcode for GameObjects多人联机(源文件)

    一、安装Netcode for Gameobjects Netcode for Gameobjects是Unity新推出的联机解决方案,该解决方案目前处于初期,相关功能不是很完善,但是用起来还不错。下面介绍一下相关用法。 首先下载安装Netcode for Gameobjects,其官方网站为Netcode for Gameobjects,安装方式也很简单,新建好Unity项目

    2024年02月03日
    浏览(62)
  • qt软件崩溃的分析方法-定位源文件和行号

    软件(debug版exe或者release版exe)在正常运行状态下(不是gdb调试运行),如果软件崩掉,那么会直接闪退,软件什么也做不了,此时无法保存软件中的状态信息,此外,也无法提供任何软件崩溃原因的信息。因此,软件崩掉,我们需要能给出信息才行,指导我们修改源码。解

    2024年02月07日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包