asusdhj
小狐狸
小狐狸
  • UID51454
  • 注册日期2015-10-10
  • 最后登录2022-05-23
  • 发帖数16
  • 经验17枚
  • 威望0点
  • 贡献值4点
  • 好评度2点
阅读:1220回复:1

一个下载漫画的脚本,不能再火狐上用

楼主#
更多 发布于:2019-01-12 11:40
只有chrome上才能下,在火狐上点击下载没反应,该怎么修改

// ==UserScript==
// @name         扑飞漫画下载
// @namespace    http://saber.love/?p=3407
// @version      1.0
// @description  下载扑飞漫画,保存到浏览器的下载文件夹里。从任意页面下载皆可,会一直下载到最后一页(自动跨章节下载)
// @match        http://www.pufei.net/*
// @license     GNU General Public License version 3
// @grant       GM_xmlhttpRequest
// @grant       GM_download
// @connect     dx.yogajx.com
// @connect     i.yogajx.com
// @connect     p.yogajx.com
// @connect     i.hamreus.com
// @connect     dx.hamreus.com
// @connect     p.szhkshop.com
// @connect     pic.fxdm.cc
// @connect     us.hamreus.com
// @connect     static.7jfb.cn
// @run-at        document-end
// ==/UserScript==


let fileName = document.getElementById("position-common").getElementsByTagName("a")[3].innerText; //当前文件名
let pageTotal = document.querySelectorAll('option').length; // 本章共有几页
let imgUrl = document.getElementById("viewimg").src; //图片网址
let pageNum = document.getElementsByTagName("select")[0].value; // //当前为第几页
let userStop, output, outputE;
let sessionKey = 'continueDown';


// 创建开始下载按钮
let startDownload = document.createElement('a');
startDownload.id = 'startDownload';
startDownload.innerHTML = '开始下载';
let addSpace = document.createElement('br');
startDownload.style= "font-weight:bold; font-size:14px; font-family:Verdana, Arial, Helvetica, sans-serif; color:#FFFFFF; background-color:#98bf21; width:120px; text-align:center; padding:4px; text-decoration:none; cursor:pointer";
document.getElementsByTagName("h1")[0].appendChild(addSpace);
document.getElementsByTagName("h1")[0].appendChild(startDownload);

//停止下载按钮
let endDownload = document.createElement('a');
endDownload.id = 'endDownload';
endDownload.innerHTML = '停止下载';
endDownload.style= "font-weight:bold; font-size:14px; font-family:Verdana, Arial, Helvetica, sans-serif; color:#FFFFFF; background-color:#98bf21; width:120px; text-align:center; padding:4px; text-decoration:none; cursor:pointer";
document.getElementsByTagName("h1")[0].appendChild(endDownload);

// 点击下载按钮时执行
document.querySelector('#startDownload').addEventListener('click', () => {
    // 检查下载 API
    if (GM_info.downloadMode != 'browser') {
        window.open('http://wx4.sinaimg.cn/large/640defebly1fylaafiwzcj20k00zk753.jpg');
        return false;
    }
    userStop = false;
    addOutput();
    setDownloadStatus(true); // 每次下载时初始化
    readyDownload(); // 点击下载按钮时,首先下载当前页
});

// 是否自动继续下载
if (sessionStorage.getItem('continueDown') !== null) {
    document.querySelector('#startDownload').click(); // 模拟点击,自动继续下载
}


/*----------------------------------------------------------我是分割线-----------------------------------------------------------*/
//以下为函数部分
function addOutput() {
    //  创建用于输出提示信息的区域
    document.querySelector('#endDownload').addEventListener('click', () => {
        if (!userStop) {
                userStop = true;
                setDownloadStatus(false);
        }
    });
    outputE = document.querySelector('#endDownload');
}

function setDownloadStatus(boolean) {
    if (boolean) {
        sessionStorage.setItem(sessionKey, 'yes');
    } else {
        sessionStorage.removeItem(sessionKey);
    }
    // sessionStorage 对当前标签页生效(对从当前标签页里打开的页面也生效)。标签页关闭后自动清除。可以解决用户不经过确认直接关闭页面时,没有正常解锁的情况
}


function readyDownload() {
    window.stop();
    if (userStop) {
        return false;
    }
    GMDownload();
}

function GMDownload() { // 用于下载图片
    if (imgUrl.indexOf('[') > -1 || imgUrl.indexOf(']') > -1) { //如果url里含有[]这两个符号,会被encodeURI编码掉。所以encodeURI之后要在转换回来(我在这地方被坑了数小时)。但为什么下边还要再encodeURI一次?不经过二次encodeURI就不行,我也是好晕啊
        imgUrl = (encodeURI(imgUrl).replace(/%5B/g, '[')).replace(/%5D/g, ']');
    } else if (imgUrl.indexOf('%') > -1 && imgUrl.indexOf('%26') < 0) { //如果含有已经转码过的汉字,就全解码成汉字,再编码。%26是排除&符号。但为什么还是需要第二次编码?
        imgUrl = encodeURI(decodeURI(imgUrl));
    } else { //虽然不知道为什么,总之编码两次就对了
        imgUrl = encodeURI(imgUrl);
    }
    let fullFileName = fileName + pageNum + ".jpg"; //设置文件名 后缀名都改为jpg

   // outputE.innerHTML = '正在下载 ' + fileName + '第' + pageNum + '页 点击可设置停止。';
    outputE.innerHTML = '停止下载 ';

    GM_xmlhttpRequest({
        method: 'GET',
        url: imgUrl,
        headers: {
            referer: window.location.href.split("?")[0]
        },
        overrideMimeType: 'text/plain; charset=x-user-defined',
        onload: function (xhr) {
            let r = xhr.responseText,
            data = new Uint8Array(r.length),
            i = 0;
            while (i < r.length) {
                data = r.charCodeAt(i);
                i++;
            }
            let blob = new Blob([data], { //manhuagui现在多数都是webP格式的图片,但是设置type的话可能存在兼容性问题,所以还是当做jpg
                type: 'image/jpeg'
            });
            let blobURL = window.URL.createObjectURL(blob);
            GM_download({
                url: blobURL,
                name: fullFileName,
                onload: function () {
                    window.URL.revokeObjectURL(blobURL);
                }
            });
            setTimeout(() => { // 在测试时,发现漫画的页面加载太快,导致很多下载的图片来不及保存,所以加上延时。
                if (pageNum === pageTotal) { //如果已经最后一页
                    document.querySelector('.next').click(); // 点击下一章
                    let t = setInterval(() => {
                        if (document.querySelector('#box')) { //如果出现提示框,则认为没有下一章了
                            clearInterval(t);
                            userStop = true;
                            setDownloadStatus(false);
                            alert('已经到达最后一页,下载完毕!');
                            return false;
                        }
                    }, 500);
                } else { //如果还有下一页
                    document.querySelector('.next').click(); // 点击下一页按钮
                }
            }, 500);
        }
    });
}
taoww
非常火狐
非常火狐
  • UID39284
  • 注册日期2013-03-18
  • 最后登录2024-05-05
  • 发帖数630
  • 经验576枚
  • 威望0点
  • 贡献值110点
  • 好评度99点
1楼#
发布于:2019-01-12 16:53
游客

返回顶部