Skip to content

Instantly share code, notes, and snippets.

@MightyPork
Last active September 23, 2017 09:02
Show Gist options
  • Save MightyPork/7bb6faa7517a1d531b2ceaa0f9c76f8f to your computer and use it in GitHub Desktop.
Save MightyPork/7bb6faa7517a1d531b2ceaa0f9c76f8f to your computer and use it in GitHub Desktop.
Deobfuscated Real Product Photos (ldiogmccojapkeckgbfjkmjdbhgopghb) aliexpress extension code
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