Last active
September 23, 2017 09:02
-
-
Save MightyPork/7bb6faa7517a1d531b2ceaa0f9c76f8f to your computer and use it in GitHub Desktop.
Deobfuscated Real Product Photos (ldiogmccojapkeckgbfjkmjdbhgopghb) aliexpress extension code
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
setGetRealImagesButton(); | |
function setGetRealImagesButton() { | |
var btn = addGetRealImgButtonOnPage(); | |
btn.addEventListener('click', getRealImgBtnPressed, true) | |
} | |
function addGetRealImgButtonOnPage() { | |
var productActionMain = document.getElementsByClassName('product-action-main')[0]; | |
var a = document.createElement('a'); | |
a.style.backgroundColor = 'green'; | |
a.style.cursor = 'pointer'; | |
a.innerText = 'Get Real Images'; | |
a.className = 'buy-now-btn'; | |
a.id = 'getImagesBtn'; | |
var attr = document.createAttribute('real'); | |
attr.value = 'false'; | |
a.setAttributeNode(attr); | |
productActionMain.appendChild(a); | |
return a | |
} | |
function getRealImgBtnPressed() { | |
showRealImages(1) | |
} | |
function showRealImages(page) { | |
var productId = extractProductIdFromUrl(document['location']['href']); | |
var ownerMemberId = extractOwnerIdFromHtml(document['documentElement']['innerHTML']); | |
var feedbackUrl = createFeedBackUrl(page, productId, ownerMemberId); | |
xhr = new XMLHttpRequest(); | |
xhr.open('GET', feedbackUrl, true); | |
xhr.send(); | |
xhr.onreadystatechange = handleGetFeedbackResponse | |
} | |
function extractProductIdFromUrl(url) { | |
var reg1 = /\d+.html/g; | |
var match1 = reg1.exec(url)[0]; | |
var reg2 = /\d+/g; | |
var match2 = reg2.exec(match1)[0]; | |
return match2 | |
} | |
function extractOwnerIdFromHtml(htmlString) { | |
var reg1 = /window.runParams.adminSeq="\d+."/g; | |
var match1 = reg1.exec(htmlString)[0]; | |
var reg2 = /\d+/g; | |
var match2 = reg2.exec(match1); | |
return match2 | |
} | |
function createFeedBackUrl(page, productId, ownerMemberId) { | |
return 'https://feedback.aliexpress.com/display/productEvaluation.htm?page=' + page + | |
'&withPictures=true&productId=' + productId + | |
'&ownerMemberId=' + ownerMemberId | |
} | |
function handleGetFeedbackResponse(unused) { | |
if (xhr.readyState == 4 && xhr.status == 200) { | |
var domParser = new DOMParser(); | |
var dom = domParser.parseFromString(xhr.responseText, 'text/html'); | |
var n = getCrtPageFromFeedbackResponse(dom); | |
if (n === -1) { | |
displayImages([], null, null); | |
return | |
}; | |
var hasNext = getHasNextFromFeedbackResponse(dom); | |
var links = getImagesFromFeedbackResponsText(xhr['responseText']); | |
displayImages(links, n, hasNext) | |
} else { | |
console.error('Extension error:', xhr) | |
} | |
} | |
function getCrtPageFromFeedbackResponse(dom) { | |
var elem = dom.evaluate('//span[@class=\"ui-pagination-active\"]', dom, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; | |
if (elem) { | |
return Number(elem.innerText) | |
} else { | |
return Number(-1) | |
} | |
} | |
function getHasNextFromFeedbackResponse(dom) { | |
var retval = false; | |
var elem = dom.evaluate('//a[contains(@class,\"ui-pagination-next\")]', dom, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; | |
if (elem) { | |
retval = true | |
}; | |
return retval | |
} | |
function getImagesFromFeedbackResponsText(text) { | |
var match = null; | |
var links = []; | |
var i = 0; | |
var imgRegex = /<img src=\".+\"/g; | |
var urlRegex = /http.+\.jpg\"/g; | |
do { | |
match = imgRegex.exec(text); | |
if (match) { | |
var match2 = urlRegex.exec(match[0]); | |
if (match2) { | |
var match = match2[0].replace('\"', ''); | |
links[i] = match; | |
i++; | |
} | |
} | |
} while (match); | |
return links | |
} | |
function displayImages(links, curImg, hasNext) { | |
if (links.length == 0) { | |
removeButtonAndSetNoImagesText() | |
} else { | |
var thumbList = document.getElementById('j-image-thumb-list'); | |
insertThumbnailScript(); | |
removePreviousImages(thumbList); | |
renderNewImages(thumbList, links); | |
insertImagesNavButtons(thumbList, curImg, hasNext) | |
} | |
} | |
function removeButtonAndSetNoImagesText() { | |
var productActionMain = document.getElementsByClassName('product-action-main')[0]; | |
var getImagesBtn = document.getElementById('getImagesBtn'); | |
productActionMain.removeChild(getImagesBtn); | |
var span = document.createElement('span'); | |
span.innerText = 'No User Images'; | |
productActionMain.appendChild(span) | |
} | |
function insertImagesNavButtons(thumbList, curImg, hasNext) { | |
var li = document.createElement('li'); | |
li.style.textAlign = 'center'; | |
if (curImg > 1) { | |
var a = document.createElement('a'); | |
li.appendChild(a); | |
a.innerText = ' << '; | |
function onClick() { | |
showRealImages(curImg - 1) | |
} | |
a.addEventListener('click', onClick, true) | |
} | |
if (hasNext) { | |
var a = document.createElement('a'); | |
li.appendChild(a); | |
a.innerText = ' >> '; | |
function onClick() { | |
showRealImages(curImg + 1) | |
} | |
a.addEventListener('click', onClick, true) | |
} | |
if (curImg > 1 || hasNext) { | |
thumbList.appendChild(li) | |
} | |
} | |
function renderNewImages(wrapper, links) { | |
var template = '<div id=\'scrollarea-content\'>' + '{{#images}}<li class=\"\" onmouseover=\"thumbnailPressed(\'{{imgsrc}}\')\" >' + '<span class=\"img-thumb-item\">' + '<img src=\"{{imgsrc}}\" oncontextmenu=\"return true;\" onmouseup=\"return true;\" onselectstart=\"return true;\">' + '</span>' + '</li>{{/images}}' + '</div>'; | |
var replacments = { | |
images: [] | |
}; | |
links.forEach(function(link) { | |
replacments.images.push({ | |
imgsrc: link | |
}) | |
}, this); | |
var html = Mustache.render(template, replacments); | |
wrapper.innerHTML = html | |
} | |
function removePreviousImages(thumbList) { | |
thumbList.classList.add('scrollarea-invalid'); | |
var items = thumbList.getElementsByTagName('li'); | |
for (var i = 0; i < thumbList.length; i++) { | |
var item = items[i]; | |
thumbList.remove(item) | |
} | |
} | |
function insertThumbnailScript() { | |
if (!document.getElementById('thumbnailPressedCustomId')) { | |
var script = document.createElement('script'); | |
script.id = 'thumbnailPressedCustomId'; | |
script.innerText = | |
'function thumbnailPressed(imgsrc) {' + | |
'var tf=document.getElementsByClassName(\'ui-image-viewer-thumb-frame\');' + | |
'if (tf[0]) { tf[0].getElementsByTagName(\'img\')[0].src=imgsrc; }' + | |
'var vi=document.getElementsByClassName(\'ui-image-viewer-image-frame\');' + | |
'if (vi[0]){vi[0].getElementsByTagName(\'img\')[0].src=imgsrc;} return true;};'; | |
document['head'].appendChild(script) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment