image auto downloader
image auto downloader
icons killer / js crawler
http only + same-origin
OK
"use strict";
/**
*
* @author xgqfrms
* @license MIT
* @copyright xgqfrms
* @created 2020-10-01
* @modified
*
* @description image auto downloader
* @difficulty Easy Medium Hard
* @complexity O(n)
* @augments
* @example
* @link
* @solutions
*
* @best_solutions
*
*/
const log = console.log;
let divs = [...document.querySelectorAll(`.learn-path-item`)];
for (let i = 0; i < divs.length; i++) {
const div = divs[i];
const img = div.firstElementChild;
// log(`img src =`, img.src);
// window.open(img.src);
autoDownloader(img.src, 1000);
}
const autoDownloader = (url = ``, timer = 0) => {
const body = document.querySelector(`body`);
const a = document.createElement(`a`);
//
a.setAttribute(`href`, url);
a.setAttribute(`download`, true);
// a.setAttribute(`download`, ``);
a.setAttribute(`style`, `display:none;`);
body.insertAdjacentElement(`beforeend`, a);
a.click();
setTimeout(() => {
// DOM remove
body.removeChild(a);
// a.remove();
// delete a;
}, timer);
}
demo
cross-origin bug
www.lanqiao.cn !== dn-simplecloud.shiyanlou.com

https://dn-simplecloud.shiyanlou.com/1487741005890.png
解决方案
a 域名下面,获取 icons urls, 存储 urls (https://www.lanqiao.cn/paths/)
b 域名下面,遍历 urls, 下载 icons (https://dn-simplecloud.shiyanlou.com)
const log = console.log;
let divs = [...document.querySelectorAll(`.learn-path-item`)];
const urls = [];
for (let i = 0; i < divs.length; i++) {
const div = divs[i];
const img = div.firstElementChild;
urls.push(img.src);
}
// chrome copy
copy(urls);
进入 https://dn-simplecloud.shiyanlou.com/ 域名页面
const urls = [
"https://dn-simplecloud.shiyanlou.com/1487741005890.png",
"https://dn-simplecloud.shiyanlou.com/course/1555406408145_%E3%80%90%E8%B7%AF%E5%BE%84%E3%80%91-%E3%80%90Python%E7%A0%94%E5%8F%91%E5%B7%A5%E7%A8%8B%E5%B8%88%E3%80%91.png",
"https://dn-simplecloud.shiyanlou.com/uid/c7edc0e1f2cfc8f40d1b699aaa32766b/1501840618053.png",
"https://dn-simplecloud.shiyanlou.com/course/1550137107333_%E3%80%90%E8%B7%AF%E5%BE%84%E3%80%91-%E3%80%90%E5%A4%A7%E6%95%B0%E6%8D%AE%E5%B7%A5%E7%A8%8B%E5%B8%88%E3%80%91.png",
"https://dn-simplecloud.shiyanlou.com/1487738666016.png",
"https://dn-simplecloud.shiyanlou.com/1487741048998.png",
"https://dn-simplecloud.shiyanlou.com/1487741143862.png",
"https://dn-simplecloud.shiyanlou.com/course/1582622893410_%E8%AE%A1%E7%AE%97%E6%9C%BA%E4%B8%93%E4%B8%9A%E8%AF%BE%E5%B0%81%E9%9D%A2.png",
"https://dn-simplecloud.shiyanlou.com/course/1552356927768_%E3%80%90%E8%B7%AF%E5%BE%84%E3%80%91-%E3%80%90Java%E7%A0%94%E5%8F%91%E5%B7%A5%E7%A8%8B%E5%B8%88%E3%80%91.png",
"https://dn-simplecloud.shiyanlou.com/1487741188918.png",
"https://dn-simplecloud.shiyanlou.com/uid/c7edc0e1f2cfc8f40d1b699aaa32766b/1501839495188.png",
"https://dn-simplecloud.shiyanlou.com/uid/c7edc0e1f2cfc8f40d1b699aaa32766b/1501837346458.png",
"https://dn-simplecloud.shiyanlou.com/course/1552356125250_%E3%80%90%E8%B7%AF%E5%BE%84%E3%80%91-%E3%80%90Web%E5%89%8D%E7%AB%AF%E5%B7%A5%E7%A8%8B%E5%B8%88%E3%80%91.png",
"https://dn-simplecloud.shiyanlou.com/1487741227106.png",
"https://dn-simplecloud.shiyanlou.com/1487738611078.png",
"https://dn-simplecloud.shiyanlou.com/assets/1596261479814_1596251235455_%E7%BC%96%E7%BB%84%202.png"
];
// 进入 https://dn-simplecloud.shiyanlou.com/ 域名页面
for (const url of urls.length) {
autoDownloader(url, 1000);
}
const autoDownloader = (url = ``, timer = 0) => {
const body = document.querySelector(`body`);
const a = document.createElement(`a`);
//
a.setAttribute(`href`, url);
a.setAttribute(`download`, true);
// a.setAttribute(`download`, ``);
a.setAttribute(`style`, `display:none;`);
body.insertAdjacentElement(`beforeend`, a);
a.click();
setTimeout(() => {
// DOM remove
body.removeChild(a);
// a.remove();
// delete a;
}, timer);
}
OK


why missing some icons???

bug urls

https://dn-simplecloud.shiyanlou.com/uid/c7edc0e1f2cfc8f40d1b699aaa32766b/1501839495188.png
https://dn-simplecloud.shiyanlou.com/uid/c7edc0e1f2cfc8f40d1b699aaa32766b/1501837346458.png
https://dn-simplecloud.shiyanlou.com/course/1552356125250_【路径】-【Web前端工程师】.png
https://dn-simplecloud.shiyanlou.com/1487741227106.png
https://dn-simplecloud.shiyanlou.com/1487738611078.png
https://dn-simplecloud.shiyanlou.com/assets/1596261479814_1596251235455_编组 2.png

// test
const urls = [
"https://dn-simplecloud.shiyanlou.com/uid/c7edc0e1f2cfc8f40d1b699aaa32766b/1501839495188.png",
"https://dn-simplecloud.shiyanlou.com/uid/c7edc0e1f2cfc8f40d1b699aaa32766b/1501837346458.png",
"https://dn-simplecloud.shiyanlou.com/course/1552356125250_%E3%80%90%E8%B7%AF%E5%BE%84%E3%80%91-%E3%80%90Web%E5%89%8D%E7%AB%AF%E5%B7%A5%E7%A8%8B%E5%B8%88%E3%80%91.png",
"https://dn-simplecloud.shiyanlou.com/1487741227106.png",
"https://dn-simplecloud.shiyanlou.com/1487738611078.png",
"https://dn-simplecloud.shiyanlou.com/assets/1596261479814_1596251235455_%E7%BC%96%E7%BB%84%202.png"
];
const autoDownloader = (url = ``, timer = 0) => {
const body = document.querySelector(`body`);
const a = document.createElement(`a`);
//
a.setAttribute(`href`, url);
a.setAttribute(`download`, true);
// a.setAttribute(`download`, ``);
a.setAttribute(`style`, `display:none;`);
body.insertAdjacentElement(`beforeend`, a);
a.click();
setTimeout(() => {
// DOM remove
body.removeChild(a);
// a.remove();
// delete a;
}, timer);
}
for (const url of urls) {
autoDownloader(url, 1000);
}
refs
xgqfrms 2012-2020
www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!
image auto downloader的更多相关文章
- HTML5 download 执行条件
HTML5 download 执行条件 同一个域名下的资源 http only 绝对路径/相对路径 都可以 demo https://cdn.xgqfrms.xyz/ https://cdn.xgqf ...
- 所有selenium相关的库
通过爬虫 获取 官方文档库 如果想获取 相应的库 修改对应配置即可 代码如下 from urllib.parse import urljoin import requests from lxml im ...
- C++11特性——变量部分(using类型别名、constexpr常量表达式、auto类型推断、nullptr空指针等)
#include <iostream> using namespace std; int main() { using cullptr = const unsigned long long ...
- overflow:hidden与margin:0 auto之间的冲突
相对于父容器水平居中的代码margin:0 auto与overflow:hidden之间存在冲突.当这两个属性同时应用在一个DIV上时,在chrome浏览器中将无法居中.至于为啥我也不明白.
- Android Auto开发之一《开始学习Auto 》
共同学习,共同进步, 转载请注明出处.欢迎微信交流:sfssqs,申请注明"Android Car"字样 ================= =================== ...
- width:100%;与width:auto;的区别
<div> <p>1111</p> </div> div{ width:980px; background-color: #ccc; height:30 ...
- SQl 2005 For XMl 简单查询(Raw,Auto,Path模式)(1)
很多人对Xpath可能比较熟悉,但不知道有没有直接操作过数据库,我们都知道 在Sql2005里公支持的几种查询有Raw,Auto模式,页并没有Path和Elements用法等,如果在2000里使用过 ...
- margin:0 auto;不居中
margin:0 auto:不居中可能有以下两个的原因; 1.没有设置宽度<div style="margin:0 auto;"></div>看看上面的代码 ...
- 初学C++ 之 auto关键字(IDE:VS2013)
/*使用auto关键字,需要先赋初值,auto关键字是会根据初值来判断类型*/ auto i = ; auto j = ; cout << "auto i = 5" & ...
随机推荐
- Flutter--Flutter中Widget、App的生命周期
前言 在App的开发过程中,我们通常都需要了解App以及各个页面的生命周期,方便我们在App进入前台时启动一些任务,在进入后台后暂停一些任务.同时,各个页面的生命周期也很重要,每个页面消失时要做一些内 ...
- IDEA SSM+MAVEN+JWT 图书管理系统
压缩包内含有MAVEN,TOMCAT,需要手动对IDEA进行配置.同时也包含数据库文件. 项目搭载了swagger,可以方便地对接口进行测试 在开发的过程中我也进行了一些记录,可以参考https:// ...
- 理解和运用 ClassLoader 该篇文章就够了
定义 根据<深入理解Java虚拟机>提到"通过一个类的全限定名(packageName.ClassName)来获取描述此类的二进制字节(class文件字节)这个动作的代码模块就叫 ...
- 理解前端模块概念:CommonJs与ES6Module
前言 现代前端开发每时每刻都和模块打交道.例如,在项目中引入一个插件,或者实现一个供全局使用组件的JS文件.这些都可以称为模块. 在设计程序结构时,不可能把所有代码都放在一起.更为友好的组织方式时按照 ...
- pycharm创建文件夹以及查看源文件存放位置(FOR MAC)
1.首先我们打开pycharm软件,一般首次打开界面如下 2.我们点击creat new project,点击后效果如下,此时创建相应的文件夹 3.创建完成后如下,并可以查看存放文件夹的位置 4.完成 ...
- 通过Joomla的两次RCE漏洞看session反序列化
关于Session的前置知识: session 对数据的序列化方式一共有三种: 默认是 php 处理器:session.serialize_handler = php 效果如图: 通过|分割数据,|前 ...
- 如何手动封装Promise函数
第一步:Promise构造函数接受一个函数作为参数,该函数的两个参数分别是:resolve和reject; function Promise(task) { // 缓存this let that = ...
- windows下hash抓取的几种方式
前提:在渗透测试过程中,对于windows系统的机器渗透需要注意hash的获取,其中hash分为LM-HASH与NTLM-HASH,在windows系统中,hash的默认存储位置为: C:\Windo ...
- OpenStack (glance 镜像服务)
glance介绍 glance 提供云虚拟机上的服务镜像(Image)功能,该模块可看成车间里的模具生产部门,其功能包括虚拟机镜像的查找.注册和检索等.该模具最基本的使用方式就是在为云虚拟机实例提供安 ...
- 关于RabbitMQ的简单理解
说明:想要理解RabbitMQ,需要先理解MQ是什么?能做什么?然后根据基础知识去理解RabbitMQ是什么.提供了什么功能. 一.MQ的简单理解 1. 什么是MQ? 消息队列(Message Que ...