上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
12
返回列表 发新帖
楼主: JML - 

求一个禁止弹窗,正常请求脚本

[复制链接]

该用户从未签到

5

主题

21

回帖

42

积分

初级工程师

积分
42

新人报道油中3周年

发表于 2022-6-23 11:58:25 | 显示全部楼层
cxxjackie 发表于 2022-6-23 11:21
我看了,vue页面,倒是不难做,不过你愿意公开你的api吗?不公开的话也能做,就是脚本估计只有你一个人能 ...

本来想要私信你的,但是权限不够,不清楚版规,不敢留联系方式。
如果你要写该脚本的话,api可以与你分享。但是个人不建议全网公开,毕竟见光容易失效。如果你写的话,也建议只自用。
api响应Content-Type: text/html; charset=UTF-8,
内容为:http://xxxxxx.mp3
回复
订阅

使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    883

    回帖

    1381

    积分

    荣誉开发者

    积分
    1381

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2022-6-23 12:50:20 | 显示全部楼层
    JML 发表于 2022-6-23 11:58
    本来想要私信你的,但是权限不够,不清楚版规,不敢留联系方式。
    如果你要写该脚本的话,api可以与你分享 ...

    目前测试直接点击播放没有问题(我随便替换了一个mp3进去),但在播放列表里切换的时候有点bug,等我有空搞一下。
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    883

    回帖

    1381

    积分

    荣誉开发者

    积分
    1381

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2022-6-23 13:31:08 | 显示全部楼层

    写好了,私人脚本我就不发到脚本区了,你试下有没有问题,记得改一下代码把你的api写进去:

    // ==UserScript==
    // @name         酷我音乐破解付费
    // @description  直接播放酷我音乐的付费歌曲
    // @namespace    cxxjackie
    // @author       cxxjackie
    // @version      1.0
    // @match        http*://www.kuwo.cn/play_detail/*
    // @grant        GM_addStyle
    // @grant        GM_xmlhttpRequest
    // @run-at       document-idle
    // ==/UserScript==
    
    (function() {
        'use strict';
        // 在这里填你的api,可以改post,加data、headers等属性,涉及跨域记得写@connect
        function getSongUrl(rid) {
            return new Promise((resolve, reject) => {
                GM_xmlhttpRequest({
                    url: `https://www.example.com/api?id=${rid}`,
                    method: 'get',
                    onload: res => res.status === 200 ? resolve(res.responseText) : reject(res.status),
                    onerror: () => reject('error')
                });
            });
        }
        // 修改歌曲信息
        async function hackSong(songinfo) {
            songinfo.isListenFee = false;
            songinfo.disable = false;
            songinfo.notAutoplay = false;
            songinfo.url = await getSongUrl(songinfo.rid);
            songinfo.ishacked = true;
        }
        // 主函数
        function main() {
            GM_addStyle('.page > .model_out{display: none !important;}');
            const playControl = document.querySelector('.playControl');
            const getPlayUrl = playControl.__vue__.getPlayUrl;
            playControl.__vue__.getPlayUrl = async function(songinfo) {
                if (!songinfo.ishacked) {
                    if (songinfo.isListenFee || songinfo.disable) {
                        await hackSong(songinfo);
                        playControl.__vue__.$store.commit('song/changeSong', songinfo);
                    } else {
                        return getPlayUrl.call(this, songinfo);
                    }
                } else {
                    // 这里有时会暂停播放,原因不明
                    setTimeout(() => {
                        if (!playControl.__vue__.playing) {
                            playControl.__vue__.togglePlaying();
                        }
                    }, 500);
                }
            };
            const mainCon = document.querySelector('.main_con');
            if (mainCon.__vue__.songinfo.isListenFee || mainCon.__vue__.songinfo.disable) {
                hackSong(mainCon.__vue__.songinfo);
            }
        }
    
        main();
    })();
    回复

    使用道具 举报

    该用户从未签到

    5

    主题

    21

    回帖

    42

    积分

    初级工程师

    积分
    42

    新人报道油中3周年

    发表于 2022-6-23 14:06:11 | 显示全部楼层
    cxxjackie 发表于 2022-6-23 13:31
    [md]写好了,私人脚本我就不发到脚本区了,你试下有没有问题,记得改一下代码把你的api写进去:

    ```js

    谢谢大佬。播放页测试没问题。
    如果你需要api,你可以私信我你的联系方式,我发给你(因为我积分还不够,无法私信你),或者等我积分够了之后私信发给你。
    对于单曲,例如http://www.kuwo.cn/play_detail/223206927脚本可以点击立即播放进行替换。

    因为每听完一首歌都要切换页面,请问下面功能能否一并实现?
    1、“添加”按钮点击无效果,修改“添加”功能(歌单专辑单曲页面都有添加按钮),把歌曲添加到播放列表并替换播放;

    2、对于歌单、或者专辑页面,能否点击“立即播放”能够加到播放列表并替换链接播放。
    例如专辑:http://www.kuwo.cn/album_detail/28860991(完全付费的专辑)
    歌单:http://www.kuwo.cn/playlist_detail/3359966222(包含付费歌曲的歌单)

    如果歌单或者专辑页面包含付费或者会员歌曲,点击立即播放会直接跳过那些付费或会员歌曲。而如果整个专辑都是付费内容,点击立即播放是没有任何效果。
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    883

    回帖

    1381

    积分

    荣誉开发者

    积分
    1381

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2022-6-23 23:40:52 | 显示全部楼层

    本帖最后由 cxxjackie 于 2022-6-23 23:41 编辑

    在歌单处点击+号将单曲添加至播放列表;点击播放按钮添加至播放列表并播放;点击上方“立即播放”将全部添加并播放。api就不用了,我平时不用酷我的。

    // ==UserScript==
    // @name         酷我音乐破解付费
    // @description  直接播放酷我音乐的付费歌曲
    // @namespace    cxxjackie
    // @author       cxxjackie
    // @version      1.1
    // @match        http*://www.kuwo.cn/*
    // @grant        GM_addStyle
    // @grant        GM_xmlhttpRequest
    // @run-at       document-idle
    // ==/UserScript==
    
    (function() {
        'use strict';
        // 在这里填你的api,可以改post,加data、headers等属性,涉及跨域记得写@connect
        function getSongUrl(rid) {
            return new Promise((resolve, reject) => {
                GM_xmlhttpRequest({
                    url: `https://www.example.com/api?id=${rid}`,
                    method: 'get',
                    onload: res => res.status === 200 ? resolve(res.responseText) : reject(res.status),
                    onerror: () => reject('error')
                });
            });
        }
        // 修改歌曲信息
        async function hackSong(songinfo) {
            songinfo.isListenFee = false;
            songinfo.disable = false;
            songinfo.notAutoplay = false;
            songinfo.url = await getSongUrl(songinfo.rid);
            songinfo.ishacked = true;
        }
        // 对每个符合selector的元素执行回调函数
        function elementEach(selector, parent, callback) {
            const elms = parent.querySelectorAll(selector);
            elms.forEach(callback);
            const mutationObserver = window.MutationObserver
                || window.WebkitMutationObserver
                || window.MozMutationObserver;
            const matchesSelector = Element.prototype.matches
                || Element.prototype.matchesSelector
                || Element.prototype.webkitMatchesSelector
                || Element.prototype.msMatchesSelector
                || Element.prototype.mozMatchesSelector;
            const observer = new mutationObserver(mutations => {
                for (const mutation of mutations) {
                    for (const addedNode of mutation.addedNodes) {
                        if (addedNode instanceof Element) {
                            let elms = addedNode.querySelectorAll(selector);
                            if (matchesSelector.call(addedNode, selector)) {
                                elms = [addedNode, ...elms];
                            }
                            elms.forEach(callback);
                        }
                    }
                }
            });
            observer.observe(parent, {
                childList: true,
                subtree: true
            });
        }
        // 主函数
        function main() {
            GM_addStyle('.page > .model_out{display: none !important;}');
            const playControl = document.querySelector('.playControl');
            if (!playControl) return;
            const store = playControl.__vue__.$store;
            const getPlayUrl = playControl.__vue__.getPlayUrl;
            playControl.__vue__.getPlayUrl = function(songinfo) {
                if (!songinfo.ishacked) {
                    if (songinfo.isListenFee || songinfo.disable) {
                        hackSong(songinfo).then(() => store.commit('song/changeSong', songinfo));
                    } else {
                        return getPlayUrl.call(this, songinfo);
                    }
                } else {
                    // 这里有时会暂停播放,原因不明
                    setTimeout(() => {
                        if (!playControl.__vue__.playing) {
                            playControl.__vue__.songReady = true;
                            playControl.__vue__.togglePlaying();
                        }
                    }, 500);
                }
            };
            if ('songlist/playAll' in store._mutations) {
                const playAll = store._mutations['songlist/playAll'][0];
                store._mutations['songlist/playAll'][0] = function() {
                    const task = [];
                    for (const songinfo of arguments[0].list) {
                        if (songinfo.isListenFee || songinfo.disable) {
                            task.push(hackSong(songinfo));
                        }
                    }
                    Promise.all(task).then(() => playAll.apply(this, arguments));
                }
            }
            elementEach('.main_con', document, mainCon => {
                if (mainCon.__vue__.songinfo && (mainCon.__vue__.songinfo.isListenFee || mainCon.__vue__.songinfo.disable)) {
                    hackSong(mainCon.__vue__.songinfo);
                }
                const div = mainCon.querySelector('.btns + div > div:nth-child(1)');
                if (div && div.__vue__ && div.__vue__.list) {
                    elementEach('.song_item', mainCon, async songItem => {
                        const rid = songItem.querySelector('.song_name > a').href.split('/').pop();
                        const songinfo = div.__vue__.list.find(s => s.rid == rid);
                        if (songinfo) {
                            songItem.querySelector('.icon-icon_play_').addEventListener('click', async e => {
                                e.stopImmediatePropagation();
                                if (songinfo.isListenFee || songinfo.disable) {
                                    await hackSong(songinfo);
                                }
                                store.commit('songlist/add', songinfo);
                                store.commit('song/changeSong', songinfo);
                            }, true);
                            songItem.querySelector('.icon-playlist_icon_add_').addEventListener('click', async e => {
                                e.stopImmediatePropagation();
                                if (songinfo.isListenFee || songinfo.disable) {
                                    await hackSong(songinfo);
                                }
                                store.commit('songlist/add', songinfo);
                            }, true);
                        }
                    });
                }
            });
        }
    
        main();
    })();
    回复

    使用道具 举报

    该用户从未签到

    5

    主题

    21

    回帖

    42

    积分

    初级工程师

    积分
    42

    新人报道油中3周年

    发表于 2022-6-24 10:47:34 | 显示全部楼层
    cxxjackie 发表于 2022-6-23 23:40
    [md]在歌单处点击+号将单曲添加至播放列表;点击播放按钮添加至播放列表并播放;点击上方“立即播放”将全 ...

    谢谢大佬
    回复

    使用道具 举报

    12
    返回列表 发新帖

    发表回复

    本版积分规则

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