// ==UserScript== // @name Direct download from Google Play // @namespace StephenP // @version 2.3.0 // @description Adds APK-DL, APKPure, APKMirror and Evozi download buttons to Google Play when browsing apps. This script is based on yurenchen's "google play apk downloader". // @author StephenP // @match https://play.google.com/* // @match http://play.google.com/* // @grant none // @downloadURL none // ==/UserScript== var ui; var wlButton; var pageURL; var title; var appCwiz; (function() { try{ 'use strict'; var site=window.location.href.toString(); ui=checkUI(); pageURL=location.href; title=document.getElementById("main-title").innerHTML; if(ui>=3){ var buttonsStyle=document.createElement("style"); var styleString='.ddlButton:visited{color: white;} .ddlButton:hover{opacity: 0.8;} .ddlButton:active{opacity: 0.6;} .ddlButton{color: white; border-radius: 4px; border: 1px; font-size: 14px; height: 46px; padding: 9px 20px; font-weight: 500; font-family: "Roboto",sans-serif; position: relative; text-align: center; line-height: 46px;'; if(ui==3){ styleString+=' margin-right: 4px;}'; buttonsStyle.innerHTML=styleString; } if(ui==4){ styleString+=' margin-left: 4px;}'; buttonsStyle.innerHTML=styleString; } document.body.appendChild(buttonsStyle); } if(pageURL.includes("details?id=")){ addButtons(); } setInterval(checkReload, 2000); } catch(err){ console.log("main(): "+err); } })(); function waitForRemovingButtons(){ //if(title!=document.getElementById("main-title").innerHTML){ if((pageURL!=location.href)||(isButtonVisible()===false)){ title=document.getElementById("main-title").innerHTML; pageURL=location.href; wlButton=null; if(location.href.includes("details?id=")){ if((ui>=3)&&(document.getElementsByClassName("ddlButton").length>0)){ try{ removePreviousCwiz(); } catch(err){ console.log(err+"; I was probably just trying to remove buttons that weren't there..."); } } addButtons(); } } else{ setTimeout(waitForRemovingButtons, 1000); } } function checkReload(){ if((pageURL!=location.href)||(isButtonVisible()===false)){ waitForRemovingButtons(); } } function isButtonVisible(){ var allButtons=document.getElementsByClassName("ddlButton"); //console.log("how many buttons: "+allButtons.length); if(allButtons.length>0){ for(var i=0;iAPKPureEvoziAPKMirror'; } else if(ui==2){ buttonslist = document.getElementsByClassName("details-actions-right")[0]; html='APK-DLAPKPureEvoziAPKMirror'; } else{ buttonslist = installButton.parentNode; html='APK-DLAPKPureEvoziAPKMirror'; } if(ui<=2){ wlButton.appendChild(wishListButton); } else{ if(typeof wishListButton!=='undefined'){ wlButton.appendChild(wishListButton.firstChild.firstChild); } } buttonslist.innerHTML=buttonslist.innerHTML+html; buttonslist.appendChild(wlButton); var ddlButton=document.getElementById("apkdlbutton"); ddlButton.onclick=function(){ddl(this,apkdlURL);}; } } function ddl(ddlButton,ddlURL){ ddlButton.firstChild.innerHTML="Loading..."; try { var request = new XMLHttpRequest(); request.onreadystatechange = function() { if (request.readyState == 4) { console.log(request.responseXML); if(request.responseURL.includes("/captcha?")){ ddlButton.firstChild.setAttribute("href",request.responseURL); ddlButton.firstChild.innerHTML="CAPTCHA"; ddlButton.onclick=null; } else{ try{ var link=request.response.getElementsByClassName("mdl-button")[0].getAttribute("href"); console.log("APK link: https:"+link); ddlButton.firstChild.innerHTML="Ready!"; window.open(link,"_self"); } catch(err){ console.log(err); } } } }; request.open('GET', ddlURL); request.responseType="document"; request.send(); } catch (err) { console.log(err); }/* /*try{ document.body.removeChild(document.getElementById('ddlFrame')); } catch(err){ } finally{ var hiddenFrame=document.createElement("iframe"); hiddenFrame.style.width=""; hiddenFrame.style.height="0"; hiddenFrame.setAttribute('id', 'ddlFrame'); hiddenFrame.setAttribute('src', ddlURL); hiddenFrame.setAttribute('frameborder', "0"); document.body.appendChild(hiddenFrame); }*/ } function getUglyUIButtons() { var matchingElements=[]; var allElements = document.getElementsByTagName('button'); for (var i = 0, n = allElements.length; i < n; i++) { if (allElements[i].getAttribute("data-item-id")!==null) { if (allElements[i].getAttribute("data-item-id").startsWith("%.@.")===true){ matchingElements.push(allElements[i]); } } } //alert(matchingElements.length); shows how many buttons for installation and whishlist are in the page return matchingElements; } function checkUI(){ //Different UIs: //1=Mobile HTML //2=Desktop HTML //3=Mobile UglyUI //4=Desktop UglyUI var check; try{ if(document.getElementsByClassName("action-bar-menu-button").length>0){ check=1; } else{ if(document.getElementsByClassName("details-info").length>0){ check=2; } else{ check=4; var metaTags=document.head.getElementsByTagName("meta"); for(var i=0;i