吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 31681|回复: 707
上一主题 下一主题
收起左侧

[Windows] 抖音下载工具BlueCatKoKo1.3.0.1

    [复制链接]
跳转到指定楼层
楼主
wyl0205 发表于 2024-9-9 21:16 回帖奖励
本帖最后由 wyl0205 于 2024-10-11 13:51 编辑

又发现一款抖音短视频下载工具,使用简单,无须获取cookie,需要安装net8.0.8,第一次启动软件时会提示,按照提示下载安装即可。
短视频点击分享,复制链接,粘贴到软件,点击解析,再点击下载即可。
优点:无需登录,小白更容易上手,下载视频无水印。
缺点:只能单个视频下载。
批量的功能看以后的版本是不是支持吧!
找资源不易,是否方便给个评分呢!




毒盘  链接:https://pan.baidu.com/s/1UN34A-2b3zhEWp0_19SLDw 提取码:3l06
1.1.6版 123盘:
https://www.123pan.com/s/VL60Vv-jwgSh?
提取码:
dpde

1.2版 123盘: https://www.123pan.com/s/VL60Vv-uYgSh?提取码:sSjd

最新版:1.3.0.1 https://github.com/K12f/BlueCatK ... 0.1/BlueCatKoKo.zip
下载地址使用迅雷即可下载。

免费评分

参与人数 212吾爱币 +188 热心值 +180 收起 理由
wy45174685 + 1 + 1 谢谢@Thanks!
heli0528 + 1 + 1 谢谢@Thanks!
ngd9651 + 1 热心回复!
a408609 + 1 + 1 谢谢@Thanks!
poaxcb + 1 + 1 热心回复!
financex + 1 + 1 用心讨论,共获提升!
xao + 1 谢谢@Thanks!
mumu312 + 1 已经处理,感谢您对吾爱破解论坛的支持!
BINKELECC + 1 + 1 我很赞同!
Hdshui + 1 + 1 谢谢@Thanks!
cd2020 + 1 + 1 我很赞同!
yuanyu888 + 1 + 1 我很赞同!
welkin2000 + 1 + 1 谢谢@Thanks!
awdxszz + 1 + 1 谢谢@Thanks!
zengbo + 1 我很赞同!
huoyanhuo + 1 我很赞同!
yinxingshu + 1 谢谢@Thanks!
Kamunion + 1 + 1 我很赞同!
xsfh1978 + 2 + 1 谢谢@Thanks!
dbdmxl + 1 解析不到原视频
jyj0912 + 1 + 1 谢谢@Thanks!
xz123156 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
Whosbd + 1 热心回复!
_過無痕 + 1 + 1 谢谢@Thanks!
gzp0217 + 1 + 1 我很赞同!
djy204 + 1 已经处理,感谢您对吾爱破解论坛的支持!
敖小乖 + 1 + 1 用心讨论,共获提升!
xiaoniao7026 + 1 + 1 谢谢@Thanks!
lwflwf + 1 + 1 谢谢@Thanks!
yangchangkun925 + 1 + 1 热心回复!
hbgydx2002 + 1 热心回复!
qiu301 + 1 + 1 我很赞同!
马可不吃蒜 + 1 我很赞同!
最爱国产 + 1 + 1 我很赞同!
xiaocai831219 + 1 + 1 谢谢@Thanks!
y50pro + 1 + 1 我很赞同!
calgulaotr + 1 谢谢@Thanks!
悲哀的蛤蟆 + 1 + 1 我很赞同!谢谢分享!~
lujayi + 1 鼓励转贴优秀软件安全工具和文档!
killov07 + 1 + 1 我很赞同!
wolf47211 + 1 + 1 我很赞同!
haungong + 1 + 1 鼓励转贴优秀软件安全工具和文档!
S.H.K.D + 1 + 1 谢谢@Thanks!
installli + 1 谢谢@Thanks!
水墨烟山 + 1 + 1 谢谢@Thanks!
zeropointo + 1 谢谢@Thanks!
xinren4081 + 1 感谢分享,有用
qingne0130 + 1 + 1 我很赞同!
xielj520 + 1 + 1 我很赞同!
topton + 1 鼓励转贴优秀软件安全工具和文档!
Bart555 + 1 + 1 谢谢@Thanks!
procurve + 1 + 1 谢谢@Thanks!
happynews001 + 1 谢谢@Thanks!
DreamBubble + 1 我很赞同!
zwjiang + 1 + 1 谢谢@Thanks!
xiaoze1993 + 1 + 1 谢谢@Thanks!
acecttgd + 1 + 1 鼓励转贴优秀软件安全工具和文档!
moxueyuye + 1 + 1 谢谢@Thanks!
w360 + 1 + 1 非常给力啊
saviorwraith + 1 + 1 谢谢@Thanks!
cc周星星 + 1 谢谢@Thanks!
240721 + 1 我很赞同!
aaa661179 + 1 + 1 我很赞同!
yzqgeorge + 1 + 1 谢谢@Thanks!
abc2018zh + 1 谢谢@Thanks!
chr1sj0ne + 1 热心回复!
moonrabbit + 1 + 1 谢谢@Thanks!
蹲街,看美女 + 1 谢谢@Thanks!希望能开发出来主页全部下载。。
我才是丶小宇宙 + 1 + 1 谢谢@Thanks!
nojon + 1 + 1 谢谢@Thanks!
XX111202 + 1 + 1 谢谢@Thanks!
Augsummer + 1 + 1 谢谢@Thanks!
niejiong88 + 1 我很赞同!
9898a + 1 + 1 我很赞同!
yam59371 + 1 热心回复!
alexxi0571 + 1 + 1 谢谢@Thanks!
geliang715 + 1 + 1 谢谢@Thanks!
midkr + 1 + 1 我很赞同!
Hweil + 1 + 1 我很赞同!
heroabo + 1 + 1 谢谢@Thanks!
wwfbzyy + 1 + 1 谢谢@Thanks!
每天会一点点 + 1 + 1 谢谢@Thanks!
记得住记得住 + 1 + 1 我很赞同!
15562263058 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
2022313 + 1 谢谢@Thanks!
weylon + 1 + 1 谢谢@Thanks!
af8889 + 1 + 1 我很赞同!
beibeibei + 1 + 1 我很赞同!
yzxinxi + 1 + 1 热心回复!
SherlockProel + 1 + 1 我很赞同!
DaShiXiong33 + 1 + 1 谢谢@Thanks!
Jason19821220 + 1 + 1 热心回复!
ahcaiwu + 1 + 1 我很赞同!
wxs200484 + 1 + 1 我很赞同!
厥丨舞 + 1 + 1 我很赞同!
qoo71 + 2 + 1 谢谢@Thanks!
laobj + 1 谢谢@Thanks!
19835725 + 1 谢谢@Thanks!
bugof52pj + 1 谢谢@Thanks!
theStyx + 1 鼓励转贴优秀软件安全工具和文档!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
水上凌波 发表于 2024-9-10 00:26
本帖最后由 水上凌波 于 2024-9-10 00:35 编辑

油猴脚本方便快捷,进入主页下拉至末尾缓存一下就可以嗅探全部作品,此脚本从https://greasyfork.org/zh-CN/scripts搬运修改

// ==UserScript==
// @name         抖音批量下载
// @namespace    http://tampermonkey.net/
// @version      0.0.5
// @description  半自动获取抖音某用户全部视频与照片,配套网站随机获取资源
// @AuThor       N0ts
// @match        https://www.douyin.com/user/*
// @downloadURL https://update.greasyfork.org/scripts/485567/%E6%8A%96%E9%9F%B3%E7%94%A8%E6%88%B7%E8%A7%86%E9%A2%91%E7%85%A7%E7%89%87%E6%89%93%E5%8C%85%E4%B8%8B%E8%BD%BD%EF%BC%88%E9%9A%8F%E6%9C%BA%E5%B0%8F%E5%A7%90%E5%A7%90%EF%BC%89.user.js
// @updateURL https://update.greasyfork.org/scripts/485567/%E6%8A%96%E9%9F%B3%E7%94%A8%E6%88%B7%E8%A7%86%E9%A2%91%E7%85%A7%E7%89%87%E6%89%93%E5%8C%85%E4%B8%8B%E8%BD%BD%EF%BC%88%E9%9A%8F%E6%9C%BA%E5%B0%8F%E5%A7%90%E5%A7%90%EF%BC%89.meta.js
// ==/UserScript==

(function () {
    // 数据操作密码
    const apiPassword = "";
    // API 地址
    const apiServer = "";

    // 视频列表
    const videos = [];
    // 图片(图文封面)列表
    const imgs = [];
    // 昵称
    const nickname = document.querySelector("div[data-e2e=user-info]").children[0].children[0].innerText;
    // 主页地址
    const userUrl = window.location.origin + window.location.pathname;
    // 已经爬过的数据 ID
    let successId = [];

    // 全部视频 li 标签
    let li = null;

     /**
     * 修改颜色为完成
     * @Param {HTMLElement} dom dom
     */
    function changeColor(dom) {
        dom.style.backgroundColor = "#00a32b";
        scrollToTop(dom.offsetTop + dom.clientHeight / 2);
    }

    /**
     * 图文获取事件
     * @param {*} event li
     */
    function liHandle(event) {
        // 如果是图文的话
        if (
            event.target.querySelector(".user-video-stats-tag") &&
            (event.target.querySelectorAll(".user-video-tag").length == 2 ||
                event.target.querySelector(".user-video-stats-tag").innerText.includes("图文"))
        ) {
            // 获取图片链接
            const url = event.target.querySelector("img").getAttribute("src");
            // 存到图片列表
            arrPush(
                {
                    url,
                    img: url,
                    desc: event.target.querySelector("p").innerText,
                    suffix: "jpg"
                },
                imgs
            );
            // 渲染到视图
            addScreen(imgDom, imgs);
            // 改颜色
            changeColor(event.target);
            console.log(`已获取 视频:${videos.length},图片:${imgs.length},共:${videos.length + imgs.length}`);
            start();
        }
    }

    /**
     * li 标签数据处理
     */
    function liInit() {
        li = Array.from(document.querySelectorAll("div[data-e2e=user-post-list] li"));
        console.log(`插件启动,已检测到 ${li.length} 条数据`);

        li.forEach((li) => {
            // 遍历给上颜色
            li.style.backgroundColor = "#ff4444";

            // 鼠标进入事件指定
            li.addEventListener("mouseenter", liHandle);
        });
    }

    /**
     * 获取图片数据
     */
    function getImgs(eventDom) {
        function cb() {
            return setTimeout(() => {
                getImgs(eventDom);
            }, 100);
        }

        let infoImgs = document.querySelectorAll(".slider-video .focusPanel > div");

        // 如果没读到则元素没加载完成
        if (!infoImgs[0]) {
            return cb();
        }

        // 获取当前屏幕中的图片元素
        for (let dom of infoImgs) {
            if (dom.getBoundingClientRect().top == 0) {
                infoImgs = dom.children;
                break;
            }
        }

        // 图片链接
        let cache = [];
        for (let dom of infoImgs) {
            const imgs = dom.querySelectorAll("img");
            // 第二张为高清图片
            const src = imgs[1].getAttribute("src");
            // 是否为 dy 临时图片,临时图片则代表没加载完成
            if (src.substring(0, 2) == "//") {
                return cb();
            }
            if (!cache.includes(src)) {
                cache.push(src);
            }
        }

        // 可能出现因为太没拿到图片,再次检测数量是否符合
        if (cache.length != infoImgs.length) {
            return cb();
        }

        let end = false;
        // 存到图片列表
        cache.forEach((img) => {
            // 获取图片唯一标识
            const cache1 = img.split("/");
            const key = cache1[cache1.length - 1].split("~")[0];

            if (successId.includes(key)) {
                end = true;
                return;
            }
            arrPush(
                {
                    url: img,
                    img: img,
                    desc: eventDom.querySelector("p").innerText,
                    suffix: "jpg",
                    key
                },
                imgs
            );
        });

        // 关闭详情
        document.querySelector(".isDark").click();
        // 改颜色
        changeColor(eventDom);

        if (end) {
            handleIndex = li.length;
            console.log("往期视频已经获取过,无需重复获取,程序结束");
            return start();
        }

        // 渲染到视图
        addScreen(imgDom, imgs);
        console.log(`已获取 视频:${videos.length},图片:${imgs.length},共:${videos.length + imgs.length}`);

        setTimeout(() => {
            start();
        }, 100);
    }

    /**
     * 获取视频数据
     * @param {HTMLElement} dom li
     */
    function getVideo(dom) {
        dom.querySelector("a > div").dispatchEvent(new Event("mouseenter"));

        if (dom.innerText.includes("购买后可看")) {
            return start();
        }

        // 第三个 source 是真实地址
        const videoSource = dom.querySelectorAll("video source")[2];
        if (!videoSource) {
            return setTimeout(() => {
                getVideo(dom);
            }, 300);
        }

        // 获取视频 id,真实地址
        const regex = /video_id=([^&]+)/;
        const match = videoSource.getAttribute("src").match(regex);

        if (successId.includes(match[1])) {
            handleIndex = li.length;
            console.log("往期视频已经获取过,无需重复获取,程序结束");
            return start();
        }

        // 存到视频列表
        arrPush(
            {
                url: "//www.douyin.com/aweme/v1/play/?" + match[0],
                img: dom.querySelector("img").getAttribute("src"),
                desc: dom.querySelector("p").innerText,
                suffix: "mp4",
                key: match[1]
            },
            videos
        );
        // 改颜色
        changeColor(dom);
        // 渲染到视图
        addScreen(videoDom, videos);
        console.log(`已获取 视频:${videos.length},图片:${imgs.length},共:${videos.length + imgs.length}`);
        start();
    }

    // 处理索引
    let handleIndex = 0;

    /**
     * 程序开始
     */
    function start() {
        // 是否已经全部获取完成
        if (li.length == handleIndex) {
            loadBarChange(false);
            // 删除全部事件
            li.forEach((li) => {
                li.removeEventListener("mouseenter", liHandle);
            });
            console.log(
                `获取完成!其中视频:${videos.length},图片:${imgs.length},共:${videos.length + imgs.length}`
            );
            // 延迟一下,不然最后个视频无法改背景色
            return setTimeout(() => {
                alert(`获取完成!其中视频:${videos.length},图片:${imgs.length},共:${videos.length + imgs.length}`);
            }, 500);
        }

        // 取出单个元素
        let oneLi = li[handleIndex];
        handleIndex++;

        loadBarChange(true, ((handleIndex + 1) / li.length) * 100);

        // 是否为图文
        if (
            oneLi.querySelector(".user-video-stats-tag") &&
            (oneLi.querySelectorAll(".user-video-tag").length == 2 ||
                oneLi.querySelector(".user-video-stats-tag").innerText.includes("图文"))
        ) {
            oneLi.querySelector("div > a").click();
            getImgs(oneLi);
        } else {
            getVideo(oneLi);
        }
    }

    /**
     * push 到数组并用 url 防止重复
     * @param {*} obj 需 push 对象
     * @param {*} arr 原数组
     */
    function arrPush(obj, arr) {
        for (const item of arr) {
            if (obj.url == item.url) {
                return;
            }
        }
        arr.push(obj);
    }

    /**
     * 渲染到对应视图
     * @param {*} dom 视图 dom
     * @param {*} arr 视图数据
     */
    function addScreen(dom, arr) {
        let cache = "";
        for (let i = 0; i < arr.length; i++) {
            cache =
                `<div><a href='${arr.url}' target='_blank'><img src='${arr.img}' /></a><p>${arr.desc}</p></div> ` +
                cache;
        }
        dom.innerHTML = cache;
    }

    /**
     * 下载全部
     * @param {*} arr 需下载数据
     * @param {*} list 结果合集
     */
    function downloadAll(arr, list = []) {
        console.log(`已下载 ${list.length},还剩 ${arr.length}`);
        if (arr.length == 0) {
            alert(`${list.length} 完成下载`);
            return;
        }
        let item = arr.splice(0, 1);
        item = item[0];

        function fetchDownload() {
            fetch(item.url)
                .then((res) =>
                    res.blob().then((blob) => {
                        const a = document.createElement("a");
                        const url = window.URL.createObjectURL(blob);
                        const filename = item.desc;
                        a.href = url;
                        a.download = filename;
                        a.click();
                        window.URL.revokeObjectURL(url);
                        a.remove();

                        list.push({
                            url: filename,
                            desc: item.desc,
                            suffix: item.suffix,
                            key: item.key
                        });

                        setTimeout(() => {
                            downloadAll(arr, list);
                        }, 100);
                    })
                )
                .catch((err) => {
                    console.log(`下载 ${list.length} 报错!尝试重新下载`, err.message);
                    setTimeout(() => {
                        fetchDownload();
                    }, 1000);
                });
        }

        fetchDownload();
    }

    /**
     * 滚动网页
     * @param {*} top 滚动高度
     */
    function scrollToTop(top) {
        document.querySelector("html").scrollTo({
            top,
            behavior: "smooth"
        });
    }

    /**
     * 进度条操作
     * @param {boolean} state 开启 Or 停止
     * @param {number} num 百分比进度
     */
    function loadBarChange(state, num = 0) {
        if (state) {
            banDom.style.visibility = "visible";
            loadBar.style.width = num + "%";
            loadBar.innerText = `${num.toFixed(0)}%`;
        } else {
            banDom.style.visibility = "hidden";
            loadBar.style.width = "0%";
            loadBar.innerText = "";
        }
    }

    /**
     * 滚动到最底部,没数据后开始
     */
    function scrollStart() {
        scrollToTop(document.body.scrollHeight);
        setTimeout(() => {
            if (document.querySelector("div[data-e2e=user-post-list]>div").innerText != "暂时没有更多了") {
                scrollStart();
            } else {
                scrollToTop(0);
                setTimeout(() => {
                    liInit();
                    start();
                }, 1000);
            }
        }, 1000);
    }

    /**
     * 获取用户已经扒过的视频 id
     */
    async function getUserKeys() {
        if (!apiServer) return;
        const res = await fetch(apiServer + "/user/key?url=" + userUrl);
        const { data } = await res.json();
        successId = data;
    }

    // 主体操作区域
    const mainDom = document.createElement("div");
    mainDom.id = "n0ts";

    // 预览区域
    const viewDom = document.createElement("div");
    viewDom.className = "viewDom viewDomHidden";
    // 视频预览
    const videoDom = document.createElement("div");
    // 图片预览
    const imgDom = document.createElement("div");
    viewDom.appendChild(videoDom);
    viewDom.appendChild(imgDom);

    // 按钮们
    const btnDom = document.createElement("div");
    btnDom.classList.add("btns");

    const btn1 = document.createElement("button");
    btn1.innerText = "下载全部";
    btn1.addEventListener("click", () => {
        downloadAll([...videos, ...imgs]);
    });

    const btn2 = document.createElement("button");
    btn2.innerText = "开始嗅探";
    btn2.addEventListener("click", async () => {
        banDom.style.visibility = "visible";
        await getUserKeys();
        scrollStart();
    });

    btnDom.appendChild(btn2);
    btnDom.appendChild(btn1);
   
    // 遮挡遮罩,过程中不允许鼠标干涉
    const banDom = document.createElement("div");
    const loadBar = document.createElement("div");
    banDom.appendChild(loadBar);
    banDom.id = "banDom";

    // 元素插入
    mainDom.appendChild(viewDom);
    mainDom.appendChild(btnDom);
    document.body.appendChild(mainDom);
    document.body.appendChild(banDom);

    // css
    const css = document.createElement("style");
    css.innerText = `
        #n0ts {
            position: fixed;
            z-index: 9999;
            bottom: 0;
            left: 0;
        }

        #n0ts img {
            width: 100%;
        }

        #n0ts .btns {
            width: 105px;
            height: 140px;
            position: absolute;
            bottom: 0;
            left: 5px;
        }

        #n0ts .btns button {
            width: 100%;
            margin-bottom: 5px;
        }

        .viewDom {
            position: fixed;
            left: 50%;
            top: 50%;
            width: 75%;
            height: 90%;
            background: #e1e1e1;
            transform: translate(-50%, -50%);
            display: flex;
            justify-content: space-between;
        }

        .viewDomHidden {
            visibility: hidden;
        }

        .viewDom div {
            width: 100%;
            display: flex;
            flex-wrap: wrap;
            justify-content: space-around;
            overflow-y: auto;
        }

        .viewDom div > div {
            width: 48%;
        }

        #banDom {
            position: fixed;
            top: 0;
            left: 0;
            z-index: 9998;
            width: 100%;
            height: 100%;
            background: rgb(0 0 0 / 20%);
            visibility: hidden;
        }

        #banDom>div {
            position: absolute;
            top: 0;
            left: 0;
            width: 0%;
            height: 30px;
            background: #00c0ff;
            text-align: center;
            color: white;
            line-height: 30px;
            transition: all 0.2s;
        }
        `;
    document.head.appendChild(css);
})();

免费评分

参与人数 8吾爱币 +6 热心值 +6 收起 理由
Voldmort + 1 + 1 我很赞同!
uindows + 1 只能下载一行5,6个视频
竹轩 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
xianzhe50 + 1 + 1 谢谢@Thanks!
abc2018zh + 1 我很赞同!
af8889 + 1 + 1 我很赞同!实测好用!!!!!!
laobj + 1 热心回复!
theStyx + 1 热心回复!

查看全部评分

推荐
 楼主| wyl0205 发表于 2024-9-9 21:42 |楼主
lxm138198 发表于 2024-9-9 21:40
没有其它网盘下载吗!!!

主要是文件大,蓝奏放不下,123都不限速了,还用其他烂盘干啥。
推荐
ytdzjun 发表于 2024-9-9 21:33
推荐
 楼主| wyl0205 发表于 2024-9-9 23:01 |楼主
psj736213 发表于 2024-9-9 21:58
lxm138198 发表于 2024-9-9 21:40
没有其它网盘下载吗!!!

123注册账号很难吗?毒盘这种几十KB下载的咋用?
推荐
lxm138198 发表于 2024-9-9 21:40
没有其它网盘下载吗!!!
推荐
qtqq 发表于 2024-9-9 22:10
这种主题很抢手的,123盘流量不够用,建议多分流几个盘,二楼已经反馈了
推荐
lzw11111 发表于 2024-9-14 15:29
水上凌波 发表于 2024-9-10 00:26
油猴脚本方便快捷,进入主页下拉至末尾缓存一下就可以嗅探全部作品,此脚本从https://greasyfork.org/zh-CN ...

这个嗅探完的下载链接 不是视频文件 怎么操作
推荐
水上凌波 发表于 2024-9-18 11:59
本帖最后由 水上凌波 于 2024-9-18 12:00 编辑
WenJiaxin02 发表于 2024-9-18 11:41
试完了,大佬真牛,牛,能用,82个视频而且一个不落,只是有些文件没有.mp4的这个后缀,需要手动加下载, ...

没有后缀是不是因为不是MP4格式,我最多下过900多个视频
5#
离轩 发表于 2024-9-9 21:20
有水印吗
6#
Blueivy 发表于 2024-9-9 21:31
感谢分享,我试一下
7#
kylee 发表于 2024-9-9 21:36
没水印好评
8#
gorelo 发表于 2024-9-9 21:48
很好用的软件,支持一下,下载了
9#
hh5128 发表于 2024-9-9 21:51
谢谢大佬!!!
10#
shicaoshuai 发表于 2024-9-9 21:54
感谢你的分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-13 00:25

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表