吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 9031|回复: 12
收起左侧

[其他转载] 油猴脚本——B站收藏夹视频观看记录保存

  [复制链接]
水木杉 发表于 2020-6-22 17:45
本帖最后由 水木杉 于 2020-6-22 17:52 编辑

    相信很多人和我一样在B站上收藏了很多视频,有些视频长时间没看都不知道自己到底看没看过,尤其是一些学习视频,一段时间后就不知道到底看到哪一集了。针对这个问题,我写了一个油猴脚本,帮助你记录收藏夹中视频的观看记录,当你有一天再次打开的时候就能给你提示,帮助你跳转到正确页面。
    1、进入B站收藏夹页面,如下图所示,脚本会帮你保存你收藏夹中的视频



1.jpg



   2、如果你的视频放在多个收藏夹里,还需要你一个个把收藏夹点开展现在屏幕上,脚本才能查找得到,保存完后会冒出保存了多少视频的提示框。

2.jpg 3.jpg

像这种有很多页的也需要你一页一页的翻动一下(因为第一次接触js,水平实在有限),收藏了新视频也需要重新回到这里保存一遍



3、当你每次从主页的收藏那里点击观看你收藏的视频的时候(如下图),就能在视频左侧看到记录了

5.jpg



6.jpg

这个小窗口不处理的话20s后就会自动关闭,你观看其他集的时候也能自动保存观看到哪一集了





下面是代码,直接粘贴到你的油猴里面吧...

(保存用的是油猴的GM_setValue函数,记录保存在了浏览器内置的 LevelDB

*****************************************************************************************************
[JavaScript] 纯文本查看 复制代码
[align=left]
// ==UserScript==
// @name         保存B站收藏夹观看记录
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  保存B站收藏夹中视频的观看记录,当你打开视频时会自动定位。
// @author       sersan
// @match        https://www.bilibili.com/*
// @match        https://space.bilibili.com/*
// @require      http://code.jquery.com/jquery-1.11.0.min.js
// @grant        GM_setValue
// @grant        GM_getValue
// ==/UserScript==

(function()
{
    'use strict';

    //var url_old = window.location.href;
    //console.log(url_old);
 

    //********************************************函数*******************************
    //保存收藏夹到Chrome 内置的 LevelDB 中
    var saveText = function()
    {
        //alert('Hello world!');
        var text = GM_getValue('myCollect');
        var myCollect={};
        var len = 0;
        if(text != undefined)
        {
            //console.log(text);

            var MyArray = JSON.parse( text );
            for(var ever in MyArray)
            {
                //console.log(ever);
                myCollect[ever] = MyArray[ever];
                len++;
            }

        }


        const $lis = $("ul.fav-video-list.content li.small-item");
        for (var i=0;i<$lis.length;i++)
        {
            //console.log($lis[i]);
            //var fireOnThis = document.querySelector('.fav-video-list');
            var urlSave = $lis[i].getElementsByTagName('a')[1].href;
            //var textSave = $lis[i].getElementsByTagName('a')[1].text;
            //console.log(urlSave);
            var num =1;
            var temp = {
                'url': urlSave,
                'num':num

            };
            var isexit = false;
            for(var ever1 in MyArray)
            {
                if(MyArray[ever1].url == urlSave)
                {
                    isexit = true;
                    break;
                }
            }

            if(!isexit)
            {
                myCollect[len] = temp;
                len++;
            }

        }
        var myCollectJson = JSON.stringify(myCollect);

        GM_setValue('myCollect', myCollectJson);
        var str1 = '保存成功! 共保存了 '+ (len+1) + ' 部视频!';
        alert(str1);

    };


    //现在的地址在收藏夹中是否存在
    var checkurl = function()
    {
        //如果只有1集就不再往下了
        var lastpage = $('.cur-page');
        //console.log(lastpage);
        if(lastpage.length == 0)
        {
            return;
        }
        var lastnum = lastpage.text().split('/')[1] - '0';
        //匹配现在的网址是不是在收藏夹中
        var url_now = window.location.href;
        var text = GM_getValue('myCollect');
        var MyArray = JSON.parse( text );
        var page = 1;
        var isexit = false;
        for(var ever in MyArray)
        {
            if(url_now == MyArray[ever].url)
            {
                isexit = true;
                page = MyArray[ever].num;
                break;

            }
        }

        if(isexit)
        {

            var body = document.getElementsByTagName("body");
            var div = document.createElement("div");

            div.id = 'myIdser';
            div.style.display = '';
            div.style.position = 'fixed';
            div.style.top = '420px';
            div.style.left = '10px';
            div.style.width = '160px';
            div.style.height = '80px';
            div.style.overflow = 'hidden';
            div.style.zIndex = '9999';
            div.style.boxShadow = '0 3px 6px #999';
            div.onscroll = function ()
            {
                div.scrollLeft = 0;
                div.scrollTop = 0;
            };
            //新的地址
            var url_new = url_now + '?p=' + page;
            var url_new_next = url_now + '?p=' + (page+1);

            var info = "<p class='pos_fixed'style='font-size:18px;color:red;text-align:center'>发现了观看记录: </p>";
            var info1 = "<p class='pos_fixed'style='font-size:18px;color:red;text-align:center'>第 " + page + " 集</p>";
            div.innerHTML += info;
            div.innerHTML += info1;

            var input_ly = document.createElement("input");
            input_ly.type = "button";
            input_ly.style.position = 'fixed';
            input_ly.style.button = '10px';
            input_ly.style.left = '15px';
            input_ly.setAttribute("class","button");
            input_ly.setAttribute("value","跳到该集");
            input_ly.addEventListener("click",function(ev){window.location.href=url_new;});
            input_ly.setAttribute("left","0px");
            input_ly.setAttribute("font-size","12px");
            input_ly.setAttribute("height","18px");
            input_ly.setAttribute("width","40px");

            var input_ly1 = document.createElement("input");
            input_ly1.type = "button";
            input_ly1.style.position = 'fixed';
            input_ly1.style.button = '10px';
            input_ly1.style.left = '110px';
            input_ly1.setAttribute("class","button");
            input_ly1.setAttribute("value","到下一集");
            input_ly1.addEventListener("click",function(ev){window.location.href=url_new_next;});
            input_ly1.setAttribute("right","0px");
            input_ly1.setAttribute("font-size","12px");
            input_ly1.setAttribute("height","18px");
            input_ly1.setAttribute("width","40px");


            div.appendChild(input_ly);
            if(page != lastnum)
            {
                div.appendChild(input_ly1);
            }

            document.body.appendChild(div);
            window.setTimeout(function(){div.remove();},20000);

        }
        else
        {

            var div1 = document.getElementById("myIdser");
            if(div1)
            {
                div1.remove();
            }
            var isNeedSave = false;
            for(var everone in MyArray)
            {
                if(url_now.indexOf(MyArray[everone].url) != -1)
                {
                    if((url_now.split("=")[1]-'0') != MyArray[everone].num)
                    {
                         MyArray[everone].num = url_now.split("=")[1] - '0';
                        isNeedSave = true;
                        break;
                    }
                    break;
                }
            }

            //将新的观看记录保存
            if(isNeedSave)
            {
                isNeedSave = false;
                //alert('Hello world!');
                var myCollectJson = JSON.stringify(MyArray);
                GM_setValue('myCollect', myCollectJson);
                //console.log(GM_getValue('myCollect', myCollectJson));

            }

        }

    }



    //******************************************入口**********************************
    //判断是不是在收藏页,在收藏页面将保存收藏夹信息
    const favlistRegex = /https:\/\/space\.bilibili\.com\/\d+\/favlist.*/;
    const flag = favlistRegex.test(window.location.href);
    //console.log(flag);
    if (flag)
    {
        //监听触发操作
        function hashChange()
        {
            //alert('事件触发了!');
            saveText();
        }
        window.setTimeout(function()
        {
            saveText();
            const $lis = $("ul.fav-video-list.content li.small-item");
            var url_inner = $lis[0].getElementsByTagName('a')[1].href;

            //url变化监听器 每3s检测一次
            setInterval(function()
            {
                //var ischanged = window.location.href != url_old;
                const $lis = $("ul.fav-video-list.content li.small-item");
                var urlSave = $lis[0].getElementsByTagName('a')[1].href;
                var isSureChange = urlSave != url_inner;
                if(isSureChange)
                {
                    //url_old = window.location.href;
                    url_inner = urlSave;
                    hashChange();
                }
            }, 3000);
        }, 3000);

    }
    else
    {
        //不是收藏夹页面
        checkurl();
        var url_old = window.location.href;

        //url变化监听器 每3s检测一次
        setInterval(function()
        {
            var ischanged = window.location.href != url_old;
            if(ischanged)
            {
                url_old = window.location.href;
                checkurl();
            }
        }, 3000);

    }






})();



免费评分

参与人数 5吾爱币 +11 热心值 +5 收起 理由
wkaocjf + 1 + 1 谢谢@Thanks!
苏紫方璇 + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
wdz2018 + 2 + 1 谢谢@Thanks!
johnnywei + 1 热心回复!
lin_xop + 1 + 1 热心回复!

查看全部评分

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

 楼主| 水木杉 发表于 2020-6-22 19:59
oudaidai 发表于 2020-6-22 19:47
一进入收藏夹就会弹出保存视频的那个窗口吗?我好像弹不出来。。。(无JS基础)

有可能是浏览器设置问题,或者是不兼容,我也不是很懂。。。
 楼主| 水木杉 发表于 2020-6-22 21:47
孤独无情 发表于 2020-6-22 21:37
能搞个压缩包或者gxs的下载链接吗 纯代码不会用啊 尴尬

点开Tampermonke,点添加新脚本,再粘贴上代码保存就能用了
andyle 发表于 2020-6-22 18:02
xueyuchen 发表于 2020-6-22 18:12
谢谢,吾爱有你更精彩
johnnywei 发表于 2020-6-22 18:27
哆啦A梦好评
tian321 发表于 2020-6-22 18:58
谢谢分享。
bsjasd 发表于 2020-6-22 19:04
多谢分享
oudaidai 发表于 2020-6-22 19:47
一进入收藏夹就会弹出保存视频的那个窗口吗?我好像弹不出来。。。(无JS基础)
戒色大师 发表于 2020-6-22 19:57
andyle 发表于 2020-6-22 18:02
一般都是收藏夹直接记录

但是收藏夹找起来麻烦啊
SharkCan 发表于 2020-6-22 20:05
油猴真是万能的, 居然可以这么用 。非常棒!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-26 03:38

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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