首页 > 其他分享 >利于puppeteer获取网络资源的直链

利于puppeteer获取网络资源的直链

时间:2023-07-17 09:55:29浏览次数:35  
标签:直链 puppeteer const lanzouShareUrl await ctx fileName downUrl 网络资源

背景

比如我想使用curl 或者 页面按钮点击直接下载个网盘资源,那就会出现问题。
因为目前各大网盘给的分享链接都是一个页面,而且大部分还都做了防盗机制,你无法简单的获取真实下载连接!
但是我们可以利用puppeteer来做到!

蓝奏云

lanzou-helper.js

import { sleep } from './index.js';
import puppeteer from "puppeteer";


/**
 * 获取蓝奏云真实下载地址
 * @param lanzouShareUrl 蓝奏云分享页地址
 * @param fileName 蓝奏云分享的文件名(如果不传入filename 意味着是下载分享的是单个文件, 而不是文件夹)
 * @returns downUrl 真实下载地址
 */
export const getLanzouDownUrl = async (lanzouShareUrl, fileName) => {
  // 启动一个浏览器
  const browser = await puppeteer.launch({
    headless: 'new',
    args: ['--no-sandbox'],
    // executablePath: "C:/Users/boringsoft/AppData/Local/Google/Chrome/Application/chrome.exe",
  });
  // 在浏览器上下文中,创建一个Page对象
  const page = await browser.newPage();


  let getDownPageUrl = lanzouShareUrl;
  if (fileName) {
    // Page对象加载一个网址
    await page.goto(lanzouShareUrl);
    getDownPageUrl = await page.evaluate(({ fileName }) => {
      const list = document.querySelectorAll(".minPx-top");

      let downPageUrl = "";
      for (const it of list) {
        const filename = it.querySelector(".filename").innerHTML;
        if (filename.indexOf(fileName) > -1) {
          downPageUrl = it.href;
          break;
        }
      }
      return downPageUrl;
    }, { fileName });
  }

  // Page对象加载一个网址
  await page.goto(getDownPageUrl);
  const iframeUrl = await page.evaluate(() => {
    const ifm = document.querySelector(".n_downlink");
    return ifm.src
  });
  await page.goto(iframeUrl);
  await sleep(500);
  const downUrl = await page.evaluate(() => {
    const aDiv = document.querySelector(".load");
    const aButton = aDiv.querySelector('a');
    return aButton.href;
  });
  // 关闭浏览器释放Page
  await browser.close();
  return downUrl;
};

main.js

const commonRouter = async (ctx, next) => {
   
}


// 下载 tvbox(测试 文件夹分享的资源下载)
router.get('/tvbox', async (ctx, next) => {
    let fileName = '影视仓';
    if (ctx.params?.type === 'mobile') {
        fileName = '影视仓手机版';
    }
    const lanzouShareUrl = 'https://qiqi2020.lanzouw.com/b09svqv1c';
    const url = await getLanzouDownUrl(lanzouShareUrl, fileName);

    // 代理中间件方式 下载蓝奏云连接
    ctx.respond = false // 绕过koa内置对象response ,写入原始res对象,而不是koa处理过的response
    await koa2Connect(
        HttpProxyMiddleware.createProxyMiddleware({
            target: url,
            changeOrigin: true,
            onProxyReq: (proxyReq, req, res) => {
                proxyReq.setHeader('accept-language', 'zh-CN,zh;q=0.9');
            }
        })
    )(ctx, next);
    await next();
})

// 下载adwars app(测试单个文件分享 下载)
router.get('/adwars', async (ctx, next) => {
    const lanzouShareUrl = 'https://lanzoux.com/adWars';
    const url = await getLanzouDownUrl(lanzouShareUrl);
    await ctx.redirect(url);
})

gitHub Realse

github-helper.js

import axios from 'axios'

/**
 * 获取github release真实下载地址
 * @param lastVersionInfoUrl github release的信息
 * @returns downUrl 真实下载地址
 */
export const getGitHubDownUrl  = async (lastVersionInfoUrl) => {
    const lastVersionInfo = await axios.get(lastVersionInfoUrl);
    const {assets, tag_name} = lastVersionInfo.data;

    let downUrl = '';
    for(const item of assets) {
        // if(item.name === `cfa-${tag_name.substr(1,tag_name.length-1)}-foss-arm64-v8a-release.apk`){
        //     downUrl = item.browser_download_url;
        // }
        if(item.name.indexOf(tag_name)){  // 获取最新的资源
            downUrl = item.browser_download_url;
        }
    }
    return downUrl;
}
// 下载 lx-music app
router.get('/lxmusic', async (ctx, next) => {
    const lastVersionInfoUrl = 'https://api.github.com/repos/lyswhut/lx-music-mobile/releases/latest';
    const gitHubDownUrl = await getGitHubDownUrl(lastVersionInfoUrl);
    await ctx.redirect(gitHubDownUrl);
})

标签:直链,puppeteer,const,lanzouShareUrl,await,ctx,fileName,downUrl,网络资源
From: https://www.cnblogs.com/dingshaohua/p/17559188.html

相关文章

  • centos8安装puppeteer
    背景我计划使用puppeteer爬点html数据,结果windows11上没问题但在我的服务器centos8上确报错。[root@104auto-task]#npmrunstart>[email protected]>nodesrc/main.js启动成功:http://localhost:3000Error:Failedtolaunchthebrowserprocess!/root/.cach......
  • [FAQ] 对于 Puppeteer 和 Chromium 在 Linux 上的安装,需要安装哪些依赖库
     比如puppeteer/chrome/linux-114.0.5735.133/chrome-linux64/chrome到底要装哪些依赖。 一般根据报错提示,安装缺少的即可,以下是一般需要的:$sudoapt-getinstalllibatk1.0-0libatk-bridge2.0-0libcups2libxkbcommon0libxcomposite1libxdamage1libxfixes3libxr......
  • 基于TPC算法的WSN网络资源分配matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:2.算法涉及理论知识概要一个移动通信系统面临的主要问题有三个:由哪些资源组成,资源如何分配?这些资源如何组织形成一个网络,网络架构是什么样子的?各网络组成部分之间如何进行信息交互?资源及资源分配、网络架构、信息交互是移动通信系统运行......
  • 基于TPC算法的WSN网络资源分配matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:  2.算法涉及理论知识概要       一个移动通信系统面临的主要问题有三个:由哪些资源组成,资源如何分配?这些资源如何组织形成一个网络,网络架构是什么样子的?各网络组成部分之间如何进行信息交互?       资源及资源分配、......
  • WebView2 通过 PuppeteerSharp 实现RPA获取壁纸 (案例版)
    此案例是《.NetWebView2项目,实现嵌入WEB页面Chromium内核》文的续集。主要是针对WebView2的一些微软自己封装的不熟悉的API,有一些人已经对PuppeteerSharp很熟悉了,那么,直接用PuppeteerSharp的话,那就降低了学习成本,那还是很有必须要的。之前自己也RPA获取过联盟的高清原画,......
  • Mac M1(arm 系列芯片)如何安装 Chromium | Puppeteer
    最近写个脚本用到puppeteer,然后安装Chromium出现一点问题,这里记录一下解决方案。Puppeteer自动安装失败在Puppeteer安装时会自动安装Chromium,然而却总是报错502导致下载失败,直接下载可以下载,命令行wget也可以,猜测是因为Puppeteer开启了新的process来安装导致环境......
  • Puppeteer+RabbitMQ:Node.js 批量加工pdf服务架构设计与落地
    全文约8500字,阅读时长约10分钟。智慧作业最近上线「个性化手册」(简称个册)功能,一份完整的个性化手册分为三部分:•学情分析:根据学生阶段性的学习和考试情况进行学情分析、归纳、总结,汇总学情数据;•精准推荐:推荐算法基于学情数据结合知识图谱进行精准练习题推荐;•错题回顾:错题的......
  • Yunzai-Bot运行报错:[ERRO] puppeteer Chromium 启动失败 解决方法
    前提:一定是本机安装了chrome各路方法汇总:重新下载puppeteer依赖(与现版本似乎不匹配)解决yunzai云崽报错puppeteerChromium启动失败|花落尽终归尘(clt6.cn)ln-vsflibre2.so/lib/libre2.so.9小白求教,puppeteerChromium启动失败·Issue#I65JGY·时雨◎星空/TR......
  • Puppeteer 入门与实战
    作者:WangZhenzhengPuppeteer是Chrome开发团队2017年发布的一个Node.js包,提供了一组用来操纵Chrome的API,通俗来说就是一个HeadlessChrome浏览器,这HeadlessChrome也可以配置成有UI的。利用Puppeteer可以做到爬取页面数据,页面截屏或者生成PDF文件,前端自动化测试(模拟输入/点击/......
  • 利用 puppeteer 抓取实时交易信息
    使用python没办法抓取http://39.107.99.235:1008/这个站的交易信息。于是就选了puppeteer,它运行一个headless的chrome浏览器,我们可以模拟人工操作,取获取数据信息......