NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Checkout Free Books (Amazon) // @namespace openuserjs.org // @description Checkout Free Books on Amazon Search Page, opens all books with 3.59+ rating. Then adds them if free and close later. Booklist saves to books (Works on every Amazon Search Page! Also Closes ALL "Thanks, %nickname%!" tabs! You are WARNED!) // @include http://www.amazon.com/*/dp/* // @include https://www.amazon.com/*/dp/* // @include https://www.amazon.com/gp/digital/fiona/thank-you* // @include https://www.amazon.com/kindle-dbs/thankYouPage* // @include https://www.amazon.com/gp/digital/fiona/clarification/purchased* // @include http://www.amazon.com/s/* // @include https://www.amazon.com/s/* // @include http://www.amazon.com/gp/search/* // @include https://www.amazon.com/gp/search/* // @include http://www.amazon.com/gp/product/* // @include https://www.amazon.com/gp/product/* // @author Dexmaster // @version 2.16 // @grant GM_openInTab // @grant GM_getValue // @grant GM_setValue // @run-at document-end // ==/UserScript== (function() { 'use strict'; if (window.free_booker === undefined) { window.free_booker = { free: !document.querySelector('#giftButtonStack'), havent_bought: !(document.querySelector('#ebooksInstantOrderUpdate_feature_div .a-section') || document.querySelector('.iou_div')), device_list: document.querySelector('select#deliverTo.a-native-dropdown'), buy_button: document.querySelector('#one-click-button'), stars: document.querySelector('.acrPopover'), thank_you: document.querySelector('.a-alert-success h1'), books_anch: [].slice.call(document.querySelectorAll('#atfResults .s-item-container a.a-link-normal.s-access-detail-page')).reverse(), books_prices: [].slice.call(document.querySelectorAll('#resultsCol #s-results-list-atf a .s-price')).reverse(), next_link: document.querySelector('#pagn span.pagnRA a#pagnNextLink'), first_link: document.querySelector('div#pagn span.pagnLink a'), double_buy: document.querySelector('.flexBoxContent'), stars_float: 3.3, stars_minimum: 2.99, // YOUR BOOK STARS MINIMUM op1_name: 'Kindle Cloud Reader', // option script will chose first in our case Kindle Cloud Reader op2_name: 'Kindle for PC', // option script will chose as alternative op3_name: '*YOUR_ALTERNATIVE*', // option script will chose as third alternative wait_ms: 3000, wait_low_ms: 5000, counter: 0, // counter of free books looper: true, // Loop when non-free reached??? get_ASIN: function(href_str) { if (href_str.indexOf('/product/') > -1) { return href_str.substring(href_str.indexOf('/product/') + 9, href_str.indexOf('?')); // LET'S GET SOME ASIN } else { return href_str.substring(href_str.indexOf('/dp/') + 4, href_str.indexOf('/ref')); // LEGACY ASIN STRING } }, ad_free_book: function(href_str) { var asin_str = window.free_booker.get_ASIN(href_str), books = GM_getValue('books', []); if (books.length === 0) { books[0] = asin_str; // FIRST BOOK IN ARRAY )) } else { if (books.indexOf(asin_str) < 0) { books.push(asin_str); // ADD BOOK TO ARRAY } } if (typeof books === 'object') { GM_setValue('books', books); // SAVE BOOK ARRAY TO STORAGE } }, parse_href: function(elem, price) { var href_str = elem.href, asin_str = window.free_booker.get_ASIN(href_str), books = GM_getValue('books', []), back_col = '#FFDDDD', parent_el = elem.parentElement.parentElement; if ((parseFloat(price) === 0) && (typeof books === 'object')) { back_col = '#DDFFDD'; if (books.indexOf(asin_str) < 0) { GM_openInTab(href_str, true); // OPEN BOOK PAGE back_col = '#DDDDFF'; clearTimeout(window.free_booker.timeout); } } parent_el.style.backgroundColor = back_col; // COLOR UP PARRENT ELEMENT parent_el.scrollIntoView(false); window.free_booker.timeout = window.setTimeout(window.free_booker.ckeckout_book, window.free_booker.wait_low_ms + Math.random() * window.free_booker.wait_low_ms); // NEXT LOOP }, select_opt: function(opt_name) { var selected = false, i; for (i = 0; i < window.free_booker.device_list.options.length; i++) { if ((window.free_booker.device_list.options[i].text.indexOf(opt_name) > -1) && (window.free_booker.stars_float > window.free_booker.stars_minimum)) { window.free_booker.device_list.selectedIndex = i; window.free_booker.buy_button.click(); selected = true; break; } } return selected; }, ckeckout_book: function() { if (window.free_booker.device_list !== null) { // BOOK PAGE if (window.free_booker.free && window.free_booker.havent_bought) { // FREE BOOK & HAVENT BOUGHT if (!!window.free_booker.stars) { if (!!window.free_booker.stars.title) { window.free_booker.stars_float = parseFloat(window.free_booker.stars.title); } } if (!window.free_booker.select_opt(window.free_booker.op1_name)) { // CHECK ALL OPTIONS IF NONE EXISTS CLOSE WINDOW if (!window.free_booker.select_opt(window.free_booker.op2_name)) { if (!window.free_booker.select_opt(window.free_booker.op3_name)) { window.free_booker.close(); } } } } else { if (!window.free_booker.havent_bought) { // IF WE OPENED A BOOK WE HAVE BOUGHT window.free_booker.ad_free_book(window.location.href); // ADD THIS BOOK TO STORAGE } window.free_booker.close(); } } else { if (!!window.free_booker.thank_you) { // IT'S THANKS PAGE if (window.free_booker.thank_you.innerHTML.trim().substring(0, 6) === 'Thanks') { // ARE YOU SURE? window.free_booker.close(); // CLOSE THANKS PAGE } } if (window.free_booker.counter === 0) { window.free_booker.books_prices.forEach(function(el, i) { var clean_el = el.innerHTML.replace(/\$/g, ''); // CLEANING PRICE window.free_booker.books_prices[i] = clean_el; if (parseFloat(clean_el) === 0) { window.free_booker.counter += 1; // COUNTING FREE BOOKS } }); } if (window.free_booker.counter > 0) { // IT'S PAGE WITH BOOKS (SEARCH PAGE) if (window.free_booker.books_anch.length > 0) { var elemn = window.free_booker.books_anch.pop(), price = window.free_booker.books_prices.pop(); window.free_booker.parse_href(elemn, price); // LET'S CHECK ONE ELEMENT } else { if (!!window.free_booker.next_link) { window.location.href = window.free_booker.next_link.href; // NEXT PAGE } } } else { if (!!window.free_booker.first_link && window.free_booker.looper) { // IF LOOPER TRUE AND THERE EXIST FIRST PAGE window.location.href = window.free_booker.first_link.href; // GOTO FIRST PAGE } else { // IF LOOPER FALSE clearTimeout(window.free_booker.timeout); // JUST STOP } } if (!!window.free_booker.double_buy) { // IT'S DOUBLE BOUGHT PAGE window.free_booker.close(); // CLOSE DOUBLE BOUGHT WINDOW } } }, listener: function() { // TRIGGER SCRIPT ON CONTENT LOADED console.log('Checkout Free Books (Amazon) Loaded'); window.free_booker.timeout = window.setTimeout(window.free_booker.ckeckout_book, window.free_booker.wait_ms + Math.random() * window.free_booker.wait_ms); }, close: function() { var win = window.open('', '_self'); window.close(); win.close(); return false; }, timeout: null }; window.free_booker.listener(); } }());