vps交流

[疑问] (半解决)大佬指教下js异步中如何添加延时


本帖最后由 qingseyouran 于 2022-3-6 22:15 编辑

谢谢几位坛朋的帮忙,不过还是不行。
只能弄个间接的,
把代码里的downloadPic(pageCurrent)删除,手动点可以下载一页,一直点可以顺序下载,到时再配合个自动化脚本。
有空再研究了。
有大佬的话,帮忙再研究研究。

下面代码下载太快了,过一会就会下载失败,想添加个延时,非码农,不懂js,网上找了半天弄不好,麻烦大佬指教下。

    if(document.location.pathname.indexOf("onlinebook")>0){
        document.body.oncontextmenu = ""
        var pageTotal = 0;
        var picUrl = ""
        //从0开始,为实际页码减一
        var pageCurrent = 0;
        //下载指定页面图片
        function downloadPic(page) {
            picUrl = path + "&pageNo=" + page ;
            fetch(picUrl).then(res => res.blob().then(blob => {
                var a = document.createElement(‘a’);
                var url = window.URL.createObjectURL(blob);
                var filename = page + ‘.jpg’;
                a.href = url;
                a.download = filename;
                a.click();
                window.URL.revokeObjectURL(url);
                if(pageCurrent<pageTotal){
                    pageCurrent++;
                    downloadPic(pageCurrent);
                }
            }))
        }
        //批量下载
        function batchDownload() {
            pageTotal = document.getElementById("sumNumb").innerText – 1;
            downloadPic(pageCurrent)
        }
        //创建下载按钮
        var downloadBtn = document.createElement("a");
        downloadBtn.innerText = "批量下载全书";
        downloadBtn.onclick = function () { batchDownload() };
        document.querySelector("body > div.divcenter > div.bq > div.bqmiddle > div.ml").appendChild(downloadBtn);
    }

不管啥语言,最烦的就是匿名方法
不懂
settimeout 的回调里面再执行下载

略懂c和python,不懂js,看不懂执行逻辑[疑问]  (半解决)大佬指教下js异步中如何添加延时

VPSMarket 发表于 2022-3-6 21:08
settimeout 的回调里面再执行下载

settimeout弄了好久,不知道加哪里才可以
加最后面那一段里?

本帖最后由 kapai 于 2022-3-6 21:23 编辑

  1.    if(document.location.pathname.indexOf("onlinebook")>0){
  2.         document.body.oncontextmenu = ""
  3.         var pageTotal = 0;
  4.         var picUrl = ""
  5.         //从0开始,为实际页码减一
  6.         var pageCurrent = 0;
  7.         //下载指定页面图片
  8.         function downloadPic(page) {
  9.             picUrl = path + "&pageNo=" + page ;
  10.             fetch(picUrl).then(res => res.blob().then(blob => {
  11.                 var a = document.createElement(‘a’);
  12.                 var url = window.URL.createObjectURL(blob);
  13.                 var filename = page + ‘.jpg’;
  14.                 a.href = url;
  15.                 a.download = filename;
  16.                 a.click();
  17.                 window.URL.revokeObjectURL(url);
  18.                 if(pageCurrent<pageTotal){
  19.                     pageCurrent++;
  20.                      setTimeout("downloadPic(pageCurrent)",1000*5);
  21.                     //downloadPic(pageCurrent);
  22.                 }
  23.             }))
  24.         }
  25.         //批量下载
  26.         function batchDownload() {
  27.             pageTotal = document.getElementById("sumNumb").innerText – 1;
  28.             downloadPic(pageCurrent)
  29.         }
  30.         //创建下载按钮
  31.         var downloadBtn = document.createElement("a");
  32.         downloadBtn.innerText = "批量下载全书";
  33.         downloadBtn.onclick = function () { batchDownload() };
  34.         document.querySelector("body > div.divcenter > div.bq > div.bqmiddle > div.ml").appendChild(downloadBtn);
  35.     }

复制代码

用settimeout把fetch那里包住即可

不行,只能下载第一页[疑问]  (半解决)大佬指教下js异步中如何添加延时

靓坤 发表于 2022-3-6 21:24
用settimeout把fetch那里包住即可

好的。我试下,这个fetch套得太多