// ==UserScript== // @name Scribd Book Downloader // @namespace http://tampermonkey.net/ // @version 0.1.1 // @description Scribd Book and Document Downloader // @author https://github.com/jtrancozo/scribd-downloader // @match https://*.scribd.com/* // @icon https://www.google.com/s2/favicons?domain=scribd.com // @grant none // @license MIT // @downloadURL https://update.greasyfork.icu/scripts/438869/Scribd%20Book%20Downloader.user.js // @updateURL https://update.greasyfork.icu/scripts/438869/Scribd%20Book%20Downloader.meta.js // ==/UserScript== (function() { let bookName = document.title; let url = document.location.href; const styles = "#app-wrapper { position: fixed; bottom: 10px; left: 10px; z-index: 9999; }"+ "#app-wrapper .btn-app {display: inline-block; padding: 10px 20px; margin-right: 15px; background: #fd4343; color: #fff; font-size: 14px; font-weight: bold; border-radius: 5px; display:none; }"; const styleSheet = document.createElement("style"); styleSheet.type = "text/css"; styleSheet.innerText = styles; document.head.appendChild(styleSheet); // btn wrapper const wrapper = document.createElement('DIV'); wrapper.id = 'app-wrapper'; document.body.appendChild(wrapper); // Btn Download const btn = document.createElement('A'); btn.innerText = 'Download Content'; btn.id = 'btn-download'; btn.className = 'btn btn-app'; btn.href = "javascript:;" wrapper.appendChild(btn); const btn_print = document.createElement('SPAN'); btn_print.innerText = 'Print'; btn_print.id = 'btn-print'; btn_print.className = 'btn-app'; wrapper.appendChild(btn_print); // Book const book = document.createElement('DIV'); book.id = 'book'; document.body.appendChild(book); // Next Page Arrow const next = document.querySelector('.page_right.next_btn'); function createBook () { const book_w = document.querySelector('#column_container .reader_column.left_column > div').style.width; const book_h = document.querySelector('#column_container .reader_column.left_column > div').style.height; // const book_w = 585; // const book_h = 765; let css = ""; book.style.cssText = `width: ${book_w}px; height: auto;`; book.innerHTML = css; } const initBookScrapper = function () { createBook(); let pages = getPageCounter(); // let pageBefore = 1; function loop () { // pageBefore = pages.atual; setTimeout(() => { clonePageContent(); next.click(); pages = getPageCounter(); if (pages.atual < pages.total) { // if (pages.atual < 20) { loop(); } else { // fixColumnsHeight(); } // console.log(pages.atual); }, 2000); } loop(); } const clonePageContent = function () { convertImages(); let pageLeft = document.querySelector('#column_container .reader_column.left_column'); let pageRight = document.querySelector('#column_container .reader_column.right_column'); book.append(pageLeft.cloneNode(true)); book.append(pageRight.cloneNode(true)); } const convertImages = function () { let imgs = document.querySelectorAll('#column_container img'); for (let img of imgs) { if (img.naturalWidth == 1 && img.naturalHeight == 1) { img.style.display = 'none !important'; img.remove(); } const newImg = getBase64Image(img); img.src = newImg; } } const nextPage = function () { } const getPageCounter = () => { let text = document.querySelector('.page_counter').innerText; text = text.split(' '); return { atual: parseInt(text[1]), total: parseInt(text[3]) } } const getBase64Image = function (img) { var canvas = document.createElement("canvas"); canvas.width = img.naturalWidth; canvas.height = img.naturalHeight; var ctx = canvas.getContext("2d"); ctx.drawImage(img, 0, 0); var dataURL = canvas.toDataURL("image/jpeg", 1); // return ''; return dataURL; } const fixColumnsHeight = function () { let columns = document.querySelectorAll('#book .reader_column'); for (let column of columns) { let contents = column.querySelector('div').querySelectorAll('div > *'); let height = 0; for (let content of contents) { height+= content.clientHeight; } column.style.height = height+'px'; } } const getPDFUrl = function (mobile) { // return location.href.replace(/^.*?(\d+).*$/, "https://www.scribd.com/document_downloads/$1?extension=pdf&source=mobile_download"); let mobileTag = mobile ? "&source=mobile_download" : "/"; return location.href.replace(/^.*?(\d+).*$/, "https://www.scribd.com/document_downloads/$1?extension=pdf" + mobileTag); } const print = () => { var divContents = document.querySelector('#book').outerHTML; let fonts = document.querySelector('#fontfaces').outerHTML; var printWindow = window.open('/', 'Livro', 'height=585,width=1015'); printWindow.document.write(''+ bookName +''); printWindow.document.write(fonts); printWindow.document.write(''); printWindow.document.write('
'); printWindow.document.write(divContents); printWindow.document.write('
'); // printWindow.document.close(); // printWindow.print(); } const downloadDocument = function () { if (/document/.test(url)) { let link = getPDFUrl(); btn.innerText = "Download as PDF"; btn.style.display = "inline-block"; btn.href = link; btn.download = "Book.pdf"; // btn.target = "_blank"; // Btn Download const btnMobile = document.createElement('A'); btnMobile.innerText = 'Download as PDF Mobile'; btnMobile.id = 'btn-download-mobile'; btnMobile.className = 'btn btn-app'; btnMobile.style.display = "inline-block"; btnMobile.href = getPDFUrl('mobile'); wrapper.appendChild(btnMobile); console.log(btnMobile); } } const downloadEbook = function () { if (/read/.test(url)) { btn.innerText = "Get Content"; btn.style.display = "inline-block"; btn.addEventListener('click', () => initBookScrapper()); btn_print.style.display = "inline-block"; btn_print.addEventListener('click', () => print()); } } switch (true) { case /document/.test(url): downloadDocument(); break; case /read/.test(url): downloadEbook(); break; case /listen/.test(url): downloadAudio(); break; default: console.log(); } })();