下载某些网站动态加载的文件到本地,比如cocos网页游戏到本地

80 阅读2分钟

大家好,我的开源项目PakePlus可以将网页/Vue/React项目打包为桌面/手机应用并且小于5M只需几分钟,官网地址:pakeplus.com

如果使用wget或者httrack只能下载网站上已经有的那些文件到本地,但是无法下载动态加载的文件,比如cocos网页版游戏里面动态加载的,这个时候就需要使用浏览器的网络请求日志功能,来记录并下载加载的文件日志,然后使用python脚本分析并下载这些文件到本地。

打开控制台,然后重新加载整个网站页面,当所有文件都记录后,点击这里下载har文件:

然后使用python加载这个文件,并分析有哪些文件,然后下载:

import os
import json
import requests
from urllib.parse import urlparse

HAR_FILE = "cocos-games.fir.show.har"
OUTPUT_DIR = "bitexiaodui_local"


def load_har_file(har_path):
    with open(har_path, "r", encoding="utf-8") as f:
        return json.load(f)


def extract_urls(har_data, filter_domain=None):
    urls = []
    entries = har_data.get("log", {}).get("entries", [])
    for e in entries:
        req = e.get("request", {})
        url = req.get("url")
        if not url:
            continue
        if url.startswith("http"):
            if filter_domain:
                if filter_domain in urlparse(url).netloc:
                    urls.append(url)
            else:
                urls.append(url)
    # 去重保序
    seen, unique_urls = set(), []
    for u in urls:
        if u not in seen:
            seen.add(u)
            unique_urls.append(u)
    return unique_urls


def download_file(url, base_output):
    try:
        parsed = urlparse(url)
        path = parsed.path.lstrip("/")
        if not path:
            path = "index.html"
        save_path = os.path.join(base_output, path)
        os.makedirs(os.path.dirname(save_path), exist_ok=True)
        r = requests.get(url, timeout=15)
        r.raise_for_status()
        with open(save_path, "wb") as f:
            f.write(r.content)
        print(f"✅ 下载成功: {url}")
    except Exception as e:
        print(f"❌ 下载失败: {url} ({e})")


def main():
    if not os.path.exists(HAR_FILE):
        print(f"❌ 未找到 {HAR_FILE},请放在当前目录下")
        return
    print(f"📖 正在读取 {HAR_FILE} ...")
    har_data = load_har_file(HAR_FILE)

    print("🔍 提取资源链接中 ...")
    urls = extract_urls(har_data, filter_domain="cocos-games.fir.show")

    if not urls:
        print("❌ 未提取到任何有效资源链接。")
        return

    print(f"共提取到 {len(urls)} 个资源,开始下载 ...")
    os.makedirs(OUTPUT_DIR, exist_ok=True)

    for url in urls:
        download_file(url, OUTPUT_DIR)

    print("\n🎯 下载完成!请运行以下命令启动本地服务器:")
    print(f"cd {OUTPUT_DIR} && python3 -m http.server 8080")


if __name__ == "__main__":
    main()

大家好,我是1024小神,技术群 / 私活群 / 股票群 或 交朋友 都可以私信我。 如果你觉得本文有用,一键三连 (点赞、评论、关注),就是对我最大的支持~