首页 > 其他分享 >一种通过注入机制获取资源的方法

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

时间:2023-05-06 18:55:51浏览次数:38  
标签:layers map 27 获取 link ._ 机制 下载 注入

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

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

关键:

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);
        }
    })
}

 

标签:layers,map,27,获取,link,._,机制,下载,注入
From: https://www.cnblogs.com/qinshoublog/p/17378273.html

相关文章

  • 【转载】JS手从URL中获取指定参数,不需要正则,很方便
    参考https://zhuanlan.zhihu.com/p/412254881代码现代方式在现代浏览器中,我们可以使用浏览器提供的URL对象来获取参数。这里方法最简单,bug少,不用我们操心。functiongetQueryString(name){//consturl=newURL(window.location.href);consturl_string="htt......
  • C#一行代码之获取控件值
    代码使用varcellValue=dataGridView.ExInvokeGetCellValue(0,1);代码封装///<summary>///DataGridView获取单元格值///</summary>///<paramname="dataGridView"></param>///<paramname="rowIndex"></param>//......
  • MySQL如何获取binlog的开始时间和结束时间
    MySQL数据库恢复到指定时间点时,我们必须通过MySQL全备+MySQL增量备份(可选)+MySQL的二进制日志(binlog)进行重放来恢复到指定时间点,实际的生产环境中,可能一段时间内生成了多个二进制日志文件(binlog),MySQL本身不会存储二进制日志文件(binlog)的开始时间和结束时间,如果要还原到某个时间点......
  • C# 通过地址获取文件及名称(含后缀)
    通过两种方式:HttpWebRequestWebClient废话不多说,直接上代码///<summary>///通过地址获取文件及名称(含后缀)///</summary>///<paramname="url">文件下载地址</param>///<paramname="stream">文件流<......
  • 获取浏览器摄像头,麦克风列表
    获取navigator.mediaDevices.enumerateDevices().then(function(devices){devices.forEach(function(device){//audioinputvideoinput(视频)audiooutput(音频)console.log('设备3:'+device.kind+":"+devic......
  • web自动化7---获取隐藏的属性信息
    获取隐藏的属性信息有很多前端页面上没有展示,但是源码里面会有,style="display:none;"作业:1、尝试用去定位隐藏元素2、打印定位到的隐藏元素的text结果:定位元素不报错,但是获取隐藏元素的text报错 方法1:使用get_attribute('innerText')定位元素textt=driver.fin......
  • 使用pyodps获取自定义函数的代码
    背景是这样的,接手的阿里云平台,很多自定义函数是没有注释、没有使用说明的。想用又不敢用,错了又不知道怎么修改,然后也找不到公司的开发,也不知道什么逻辑。所以很自然的想到了下载自定义函数的代码。但是页面又没有提供这个入口。所以查了下pyodps的文档,整理了一个下载函数代码的脚......
  • sql注入原理和mybatis解决sql注入
    转载:https://www.bilibili.com/video/BV1ZR4y1Y745/?spm_id_from=333.880.my_history.page.click&vd_source=46d50b5d646b50dcb2a208d3946b1598https://juejin.cn/post/7064740474057146398#heading-11......
  • Java获取pdd详情api接口、商品详情、商品描述、宝贝链接获取展示示例
    ​拼多多商品详情就是对拼多多商城中的宝贝的描述了,消费者们在进入到宝贝的详情页面后,可以通过这些描述去了解该款宝贝。其实这样也可以大大的增加商品的转化率。那么它的作用有什么呢?1.突出商品卖点:把商品的特色和突出点写表现出来,很更好的吸引到顾客,让顾客有点击和购买的欲......
  • 一统天下 flutter - 存储: path_provider - 用于获取不同平台的本地存储的路径
    源码https://github.com/webabcd/flutter_demo作者webabcd一统天下flutter-存储:path_provider-用于获取不同平台的本地存储的路径示例如下:lib\storage\path_provider.dart/**path_provider-用于获取不同平台的本地存储的路径**在pubspec.yaml中做如......