Doc88 Dosya İndirici

 

   

    Bazen bir araştırma metnini veya parayla satılan bir yazıyı eğitim amacıyla aradığınız zaman, çok değişik sitelere denk gelebiliyorsunuz. Scribd.com ve Doc88.com gibi birçok örnek site mevcut. Bunlar genellikle üyelik istiyor ve üye girişi yaptıktan sonra diğer kullanıcıların yüklediği içeriklerin tamamına ulaşabiliyorsunuz. Nefret ettiğim ama arada sırada kullanmak zorunda kaldığım bu sitelere her girdiğimde söve söve içeriklerine ulaşıyorum. Scribd.com bir derece de doc88.com'da içeriği indirme şansınız yok. Wepay üzerinden ödeme aldığı ve Türkiye'de bu ödeme şekli kullanılmadığı için (Sanırım Çin anakarası hariç kullanılmıyor da) içeriklere para verseniz de ulaşamıyorsunuz. Bu tip durumlarda etrafından dolanmanız gerekebiliyor. 

    Github'da apankowski kullanıcısının yaptığı çalışma gözüme çarptı. Tarayıcınıza yer işareti (bookmark) olarak bir kod ekliyorsunuz ve bu kod içeriğin tamamını sizin için resim dosyasına çeviriyor. Sonrasında resim dosyasını bir pdf programı ile açıp, pdf şeklinde kaydedebilirsiniz. 

POC doc88.com Downloader  

Sayfadaki kod ile çalıştıramadım, ilk sayfada takılıp kaldı. Ben de kodun üzerinde biraz oynadım. İşte oynadığım kod da şu şekilde:

javascript:(async()=>{function getPageCanvas(n){return document.getElementById(`page_${n}`)}function getPageCount(){const e=document.getElementById("pageNumInput");if(!e)throw new Error("Couldn't find element containing total page count");return parseInt(e.parentNode.innerText.replaceAll(" ","").replaceAll("/",""))}function waitUntilElementDisappears(e){return new Promise(t=>{let n=(_,o)=>{e.isConnected||(o.disconnect(),t())};new MutationObserver(n).observe(document,{childList:!0,subtree:!0})})}async function revealAllPagePlaceholders(){let e;do{e=!1;let t=document.getElementById("continueButton");null!=t&&(e=!0,t.click());let n=document.getElementById("captcha_reading");if(null!=n){e=!0,n.scrollIntoView(),alert('Captcha çıkıyor, kendin çözmelisin...'),await waitUntilElementDisappears(n)}let a=document.getElementById("continue_page");null!=a&&(e=!0,a.scrollIntoView(),alert('Sayfalar bir koruma ile engellenmiş olabilir, elle çöz ve devam et...'),await waitUntilElementDisappears(a))}while(e);let t=getPageCount();for(let e=1;e<=t;e++)if(!getPageCanvas(e))throw new Error(`Couldn't find canvas for page ${e}`)}function imageFormatFor({format:e="png",quality:t=.9}){switch(e.toLowerCase()){case"jpg":case"jpeg":return{mimeType:"image/jpeg",extension:".jpg",quality:t};case"png":return{mimeType:"image/png",extension:".png"};default:throw new Error(`Unknown format ${e}`)}}function imageFilenameFor(e,{imageNamePrefix:t="page"},{extension:n}){return t+e.toString().padStart(3,"0")+n}async function captureAsImageBlob(e,t){let{mimeType:n,quality:a}=t;return new Promise((t,o)=>{e.toBlob(e=>{null!==e?t(e):o(new Error("Blob alınamadı"))},n,a)})}function downloadBlob(e,t){let n=document.createElement("a");n.download=t,n.href=URL.createObjectURL(e),n.click(),setTimeout(()=>URL.revokeObjectURL(n.href),2000)}function getDocumentTitle(){return document.querySelector("h1")?.title||document.querySelector(%27meta[property="og:title"]%27)?.content||"doc88_download"}async function loadSupportScript(e){return new Promise((t,n)=>{let a=document.createElement("script");a.type="text/javascript",a.src=e,a.onload=()=>t(),a.onerror=o=>n(new Error(`Script yüklenemedi: ${e}`)),document.head.appendChild(a)})}function pageImageHandlerFor({archive:e="zip"}){switch(e){case"none":return{initialize:async()=>{},handlePageImage:async(e,t,n)=>{downloadBlob(t,n)},finalize:async()=>{}};case"zip":{let t;return{initialize:async()=>{await loadSupportScript("https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js"),t=new JSZip},handlePageImage:async(e,n,a)=>{t.file(a,n,{compression:"DEFLATE"})},finalize:async()=>{let e=(getDocumentTitle()||"pages")+".zip",n=await t.generateAsync({type:"blob"});downloadBlob(n,e),t=null}}}throw new Error(`Geçersiz arşiv tipi: ${e}`)}}function waitUntilPageIsLoaded(e,t,n){let a=parseFloat(t.getAttribute("lz"));isNaN(a)?setTimeout(()=>waitUntilPageIsLoaded(e,t,n),100):n()}async function preloadPage(e,t){t.scrollIntoView();return new Promise(n=>waitUntilPageIsLoaded(e,t,n))}async function downloadPages(e={}){let t=imageFormatFor(e),n=pageImageHandlerFor(e);await revealAllPagePlaceholders();let{fromPage:a=1,toPage:o=getPageCount()}=e;await n.initialize();for(let r=a;r<=o;r++){let i=getPageCanvas(r);if(!i)break;let l=imageFilenameFor(r,e,t);await preloadPage(r,i);let s=await captureAsImageBlob(i,t);await n.handlePageImage(r,s,l)}await n.finalize();alert(`Tüm sayfalar indirildi: ${a}-${o}`)}downloadPages({format:"png",archive:"zip",imageNamePrefix:"doc88_"})})(); 

Belki birilerinin işine yarar. 🤷‍♂️

Yorumlar

Lütfen bizimle fikrinizi paylaşmaktan çekinmeyin. Yorumlarınız bizim için önemli.