一种通过注入机制获取资源的方法

目的:从地图网站上获取瓦片文件,但直接访问图片地址显示被禁止。需要绕开这个禁止。

方法:通过在页面脚本中进行注入,在加载资源的时候,直接将资源下载到本地下载文件夹中

关键:

1、注入方法,将原事件函数指向新变量,用自己的函数替代,并执行原函数以保证程序正常运行;

2、新变量仍在原对象中,保证闭包的局部变量可访问;

3、页面内部请求二进制数据;

4、直接创建链接并下载到下载目录

问题:

1、重复下载;2、自动遍历还没做

//保留旧有过程
map._layers[27]._tileOnLoadold = map._layers[27]._tileOnLoad
//用新方法替换原过程    
map._layers[27]._tileOnLoad = function (t, i) {
    //执行原来的过程
    map._layers[27]._tileOnLoadold(t, i);
    //下载并处理资源,根据资源内容,下载资源到本地文件夹,并重命名
    window.fetch(i.src).then(a => a.blob()).then(a => {
        let url = window.URL.createObjectURL(a);
        let link = document.createElement('a');
        link.href = url;
        //根据地址过滤出瓦片编号,作为作为存储文件名
        let nums = i.src.match(/x=(\d+)&y=(\d+)&z=(\d+)/);
        if(nums!=null){
        link.download = nums.slice(1, 4).join('_') + ".jpg"; 
        link.target = "_blank";
        link.click();
        window.URL.revokeObjectURL(link.href)
        }else{
            console.log(i.src);
        }
    })
}

 

posted @ 2023-05-06 18:45  首席吐槽官秦寿  阅读(40)  评论(0编辑  收藏  举报