document.body.appendChild(
	Object.assign(document.createElement('div'),
					{style: 'position:fixed;bottom:0;left:0;',
					innerHTML:
`
<div style="background: purple; height: 200px; width: 300px;">
	<a id="myDownloader" style="color: white;" href="" download>myDownloader</a>
	<div>
		<input id="sharedClass" placeholder="shared class"></input>
	</div>
	<div>
		<input id="imageClass" placeholder="viewed image class"></input>
	</div>
	<div>
		<button id="caller">Execute</button>
	</div>
</div>
`
}));
function collectLinkOwners(myDownloader, sharedClass) {
	let r = [];
	for (i of document.getElementsByClassName(sharedClass)) {
		try {
			var linkOwner = i.getElementsByTagName("a")[0];
		} catch (err) {
			console.error("Missing 'a' subelement. However, this might be normal.");
		}
		r.push(linkOwner);
	}
	return r;
}
function download(myDownloader, imageClass, linkOwners) {
	var linkOwner = linkOwners.shift();
	linkOwner.click();
	requestAnimationFrame(async (myDownloader, imageClass, linkOwners) => {
		await new Promise(resolve => setTimeout(resolve, 5000));
		try {	// image
			myDownloader.href = document.getElementsByClassName(imageClass)[0].src;
		} catch (err) { // video
			let flag = false;
			for (i of document.getElementsByTagName('video')){
				if(i.offsetParent != null) {
					myDownloader.href = i.src;
					flag = true;
					break;
				}
			}
			if (!flag) {
				console.error("Missing media.");
			}
		}
		//myDownloader.click();
		console.log(myDownloader.href);
		download(myDownloader, imageClass, linkOwners);
	}, myDownloader, imageClass, linkOwners);
}
function execute() {
	const myDownloader = document.getElementById("myDownloader");
	const sharedClass  = document.getElementById("sharedClass").value;
	const imageClass   = document.getElementById("imageClass").value;

	if (sharedClass == "" || imageClass == "") {
		throw "Empty fields!";
	}

	download(myDownloader, imageClass, collectLinkOwners(myDownloader, sharedClass));
}
document.getElementById("caller").addEventListener("click", execute);