Untitled
unknown
plain_text
a year ago
3.5 kB
11
Indexable
// ==UserScript==
// @name Export Image URLs
// @version 3.1.1
// @description Extracts image URLs from a web page and copies them to the clipboard when a button is clicked.
// @author tranbinh
// @supportURL *
// @namespace *
// @license MIT
// @connect greasyfork.org
// @connect sleazyfork.org
// @connect github.com
// @connect openuserjs.org
// @match *://*/*
// @exclude *://*.youtube.com/*
// @grant GM_setClipboard
// @grant GM_log
// @compatible chrome
// @compatible firefox
// @compatible edge
// @compatible opera
// @compatible safari
// @run-at document-idle
// @icon *
// ==/UserScript==
(function() {
'use strict';
const SECONDS_TO_WAIT_FOR_SCROLL = 1; // adjust as needed
// function to get all image link elements
function getImageLinks() {
const imageLinks = document.querySelectorAll('img[src]');
return Array.from(imageLinks).map(img => img.getAttribute('src'));
}
// function to scroll to the bottom of the page and wait for new images to load
async function waitForImagesToLoad() {
window.scrollTo(0, document.body.scrollHeight);
await new Promise(resolve => setTimeout(resolve, SECONDS_TO_WAIT_FOR_SCROLL * 1000));
}
// create an array to hold the image URLs
let imageUrls = [];
// add a button to the page that will copy the image URLs to the clipboard when clicked
const copyButton = document.createElement('button');
copyButton.classList.add('copy-urls-button');
copyButton.textContent = 'Copy all URLs';
copyButton.style.position = 'fixed';
copyButton.style.background = '#efefef';
copyButton.style.color = 'black';
copyButton.style.padding = '3px 7px';
copyButton.style.bottom = '20px';
copyButton.style.right = '20px';
copyButton.style.zIndex = '1000';
copyButton.style.cursor = 'pointer';
copyButton.style.border = '1px solid #767676';
copyButton.style.borderRadius = '3px';
copyButton.style.boxShadow = 'none';
copyButton.style.font = '12px sans-serif';
copyButton.style.userSelect = 'none';
document.body.appendChild(copyButton);
// add a click event listener to the button
copyButton.addEventListener('click', async function() {
let finished = false;
let numUrls = 0;
while (!finished) {
// scroll to the bottom of the page and wait for new images to load
await waitForImagesToLoad();
// get the newly loaded image URLs
const newImageUrls = getImageLinks().filter(url => !imageUrls.includes(url));
imageUrls.push(...newImageUrls);
// check if all images have been loaded
finished = newImageUrls.length === 0;
numUrls += newImageUrls.length;
}
// join the image URLs into a string separated by newlines
const imageUrlString = imageUrls.join('\n');
// copy the image URL string to the clipboard
GM_setClipboard(imageUrlString, 'text');
// disable the button and change the text to indicate that the URLs have been copied
copyButton.disabled = true;
copyButton.textContent = `${numUrls} URL(s) copied to clipboard`;
// enable the button again after 3 seconds
setTimeout(function() {
imageUrls = [];
copyButton.disabled = false;
copyButton.textContent = 'Copy all URLs';
}, 3000);
});
})();
Editor is loading...
Leave a Comment