Descarga muchos archivos
A mi me gusta comprar muchos libros electrónicos. Dejé de comprar libros impresos cuando me di cuenta de que ocupaban un poco de espacio. El único problema es que te dejan con una página de múltiples ligas que para descargar. Un solo libro usualmente viene en al menos tres formatos diferentes. La última colección que compré tenía 45 ligas de dsecarga (15 libros, 3 formatos por libro). Me quitó la intención de comprar más libros electrónicos o cosas que tenga que descargar porque no quería gastar toda una tarde dando click a las ligas de descarga. La gente que vende contenido descargable debería de hacer el proceso de descarga más sencillo. Una sóla liga para descargar todo el contenido sería perfecto.
Si fuera contenido gratuito, sólo tendría que copiar las ligas a un archivo de texto y dirigir un wget a ellas. Ese método no funciona tan bien con contenido de pago. Usualmente hay un proceso de autenticación de por medio. Sí, wget soporta “cookies” pero se vuelve un método complicado.
El otro día estaba viendo una lista larga de descargas que he venido posponiendo por algún tiempo y decidí que sería más divertido escribir un poco de JavaScript que dar click sobre cada una de las ligas.
He automatizado el proceso de abrir una nueva ventana/tab por cada liga. El contenido se descargará automáticamente cada 30 segundos ejecutando el siguiente script en JavaScript desde la consola de desarrollo. Necesitarás permitir que cada página se abra dentro de un tab nuevo una vez que el script comience a ejecutarse. Eso puede hacerse utilizando un ícono la barra de direcciones de Chrome. Los tabs desaparecerán tan pronto como la descarga comience.
// Edita este control para descargar
// ---------------------------------------
// 30 segundos de retraso entre cada descarga
var timeBetweenDownloads = 30 * 1000;
// Como encontrar las ligas
var selector = '.js-start-download a';
var books = [...document.querySelectorAll(selector)].map(x => x.href);
// ---------------------------------------
// Descarga libros abriendo cada liga en una ventana/tab nueva
// y espera 30 segundos entre cada descarga
function download(book_urls, milliseconds){
if (book_urls.length === 0) {
return;
}
const [head, ...tail] = book_urls;
window.open(head);
window.setTimeout(() => download(tail, milliseconds), milliseconds);
}
// Descarga todo lo que encontró
download(books, timeBetweenDownloads);
Instrucciones de uso:
- En tu navegador, ve a la pagina que contiene las ligas de descarga
- Presiona F12 para abrir las herramientas de desarrollo
- Necesitarás editar “selector” para encontrar los elementos
correctos en la página
- Puedes dar click derecho en la liga de descarga y seleccionar “Inspect” para revelar el elemento HTML que corresponde a la liga de descarga
- En este caso las ligas de descarga son
aelemento anidado dentro de la secciondiv, bajo la clasejs-start-download - La documentación jQuery es una buena referencia para los “selectors”
- Copia y penga el cödigo en la consola
- Una vez que las descargas hayan comenzado, notarás un nuevo ícono en la barra de direcciones de Chrome. Da click en el ícono y permite que la página abra ventanas múltiples