maBOT 10 Posted January 15, 2020 Report Share Posted January 15, 2020 Hello all, I stumbled across a Javascript code last week which might help me in what I'm doing now, however, I have had hard times to use the same in bot I'm working with -- mainly because I had no experience with handling the Javascript code, except using simple JS code to scroll or refresh the page. I'm aware that I need to pass certain scraped parameters from the image I wish to apply JS on, but regardless of many attempts I couldn't get it done. I'm pasting the JS code and the code from the page which I'd like to run JS. // VERSION: 2.3 LAST UPDATE: 11.07.2013 /* * Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php * * Made by Wilq32, wilq32@gmail.com, Wroclaw, Poland, 01.2009 * Website: http://code.google.com/p/jqueryrotate/ */ (function($) { var supportedCSS,supportedCSSOrigin, styles=document.getElementsByTagName("head")[0].style,toCheck="transformProperty WebkitTransform OTransform msTransform MozTransform".split(" "); for (var a = 0; a < toCheck.length; a++) if (styles[toCheck[a]] !== undefined) { supportedCSS = toCheck[a]; } if (supportedCSS) { supportedCSSOrigin = supportedCSS.replace(/[tT]ransform/,"TransformOrigin"); if (supportedCSSOrigin[0] == "T") supportedCSSOrigin[0] = "t"; } // Bad eval to preven google closure to remove it from code o_O eval('IE = "v"=="\v"'); jQuery.fn.extend({ rotate:function(parameters) { if (this.length===0||typeof parameters=="undefined") return; if (typeof parameters=="number") parameters={angle:parameters}; var returned=[]; for (var i=0,i0=this.length;i<i0;i++) { var element=this.get(i); if (!element.Wilq32 || !element.Wilq32.PhotoEffect) { var paramClone = $.extend(true, {}, parameters); var newRotObject = new Wilq32.PhotoEffect(element,paramClone)._rootObj; returned.push($(newRotObject)); } else { element.Wilq32.PhotoEffect._handleRotation(parameters); } } return returned; }, getRotateAngle: function(){ var ret = []; for (var i=0,i0=this.length;i<i0;i++) { var element=this.get(i); if (element.Wilq32 && element.Wilq32.PhotoEffect) { ret[i] = element.Wilq32.PhotoEffect._angle; } } return ret; }, stopRotate: function(){ for (var i=0,i0=this.length;i<i0;i++) { var element=this.get(i); if (element.Wilq32 && element.Wilq32.PhotoEffect) { clearTimeout(element.Wilq32.PhotoEffect._timer); } } } }); // Library agnostic interface Wilq32=window.Wilq32||{}; Wilq32.PhotoEffect=(function(){ if (supportedCSS) { return function(img,parameters){ img.Wilq32 = { PhotoEffect: this }; this._img = this._rootObj = this._eventObj = img; this._handleRotation(parameters); } } else { return function(img,parameters) { this._img = img; this._onLoadDelegate = [parameters]; this._rootObj=document.createElement('span'); this._rootObj.style.display="inline-block"; this._rootObj.Wilq32 = { PhotoEffect: this }; img.parentNode.insertBefore(this._rootObj,img); if (img.complete) { this._Loader(); } else { var self=this; // TODO: Remove jQuery dependency jQuery(this._img).bind("load", function(){ self._Loader(); }); } } } })(); Wilq32.PhotoEffect.prototype = { _setupParameters : function (parameters){ this._parameters = this._parameters || {}; if (typeof this._angle !== "number") { this._angle = 0 ; } if (typeof parameters.angle==="number") { this._angle = parameters.angle; } this._parameters.animateTo = (typeof parameters.animateTo === "number") ? (parameters.animateTo) : (this._angle); this._parameters.step = parameters.step || this._parameters.step || null; this._parameters.easing = parameters.easing || this._parameters.easing || this._defaultEasing; this._parameters.duration = parameters.duration || this._parameters.duration || 1000; this._parameters.callback = parameters.callback || this._parameters.callback || this._emptyFunction; this._parameters.center = parameters.center || this._parameters.center || ["50%","50%"]; if (typeof this._parameters.center[0] == "string") { this._rotationCenterX = (parseInt(this._parameters.center[0],10) / 100) * this._imgWidth * this._aspectW; } else { this._rotationCenterX = this._parameters.center[0]; } if (typeof this._parameters.center[1] == "string") { this._rotationCenterY = (parseInt(this._parameters.center[1],10) / 100) * this._imgHeight * this._aspectH; } else { this._rotationCenterY = this._parameters.center[1]; } if (parameters.bind && parameters.bind != this._parameters.bind) { this._BindEvents(parameters.bind); } }, _emptyFunction: function(){}, _defaultEasing: function (x, t, b, c, d) { return -c * ((t=t/d-1)*t*t*t - 1) + b }, _handleRotation : function(parameters, dontcheck){ if (!supportedCSS && !this._img.complete && !dontcheck) { this._onLoadDelegate.push(parameters); return; } this._setupParameters(parameters); if (this._angle==this._parameters.animateTo) { this._rotate(this._angle); } else { this._animateStart(); } }, _BindEvents:function(events){ if (events && this._eventObj) { // Unbinding previous Events if (this._parameters.bind){ var oldEvents = this._parameters.bind; for (var a in oldEvents) if (oldEvents.hasOwnProperty(a)) // TODO: Remove jQuery dependency jQuery(this._eventObj).unbind(a,oldEvents[a]); } this._parameters.bind = events; for (var a in events) if (events.hasOwnProperty(a)) // TODO: Remove jQuery dependency jQuery(this._eventObj).bind(a,events[a]); } }, _Loader:(function() { if (IE) return function() { var width=this._img.width; var height=this._img.height; this._imgWidth = width; this._imgHeight = height; this._img.parentNode.removeChild(this._img); this._vimage = this.createVMLNode('image'); this._vimage.src=this._img.src; this._vimage.style.height=height+"px"; this._vimage.style.width=width+"px"; this._vimage.style.position="absolute"; // FIXES IE PROBLEM - its only rendered if its on absolute position! this._vimage.style.top = "0px"; this._vimage.style.left = "0px"; this._aspectW = this._aspectH = 1; /* Group minifying a small 1px precision problem when rotating object */ this._container = this.createVMLNode('group'); this._container.style.width=width; this._container.style.height=height; this._container.style.position="absolute"; this._container.style.top="0px"; this._container.style.left="0px"; this._container.setAttribute('coordsize',width-1+','+(height-1)); // This -1, -1 trying to fix ugly problem with small displacement on IE this._container.appendChild(this._vimage); this._rootObj.appendChild(this._container); this._rootObj.style.position="relative"; // FIXES IE PROBLEM this._rootObj.style.width=width+"px"; this._rootObj.style.height=height+"px"; this._rootObj.setAttribute('id',this._img.getAttribute('id')); this._rootObj.className=this._img.className; this._eventObj = this._rootObj; var parameters; while (parameters = this._onLoadDelegate.shift()) { this._handleRotation(parameters, true); } } else return function () { this._rootObj.setAttribute('id',this._img.getAttribute('id')); this._rootObj.className=this._img.className; this._imgWidth=this._img.naturalWidth; this._imgHeight=this._img.naturalHeight; var _widthMax=Math.sqrt((this._imgHeight)*(this._imgHeight) + (this._imgWidth) * (this._imgWidth)); this._width = _widthMax * 3; this._height = _widthMax * 3; this._aspectW = this._img.offsetWidth/this._img.naturalWidth; this._aspectH = this._img.offsetHeight/this._img.naturalHeight; this._img.parentNode.removeChild(this._img); this._canvas=document.createElement('canvas'); this._canvas.setAttribute('width',this._width); this._canvas.style.position="relative"; this._canvas.style.left = -this._img.height * this._aspectW + "px"; this._canvas.style.top = -this._img.width * this._aspectH + "px"; this._canvas.Wilq32 = this._rootObj.Wilq32; this._rootObj.appendChild(this._canvas); this._rootObj.style.width=this._img.width*this._aspectW+"px"; this._rootObj.style.height=this._img.height*this._aspectH+"px"; this._eventObj = this._canvas; this._cnv=this._canvas.getContext('2d'); var parameters; while (parameters = this._onLoadDelegate.shift()) { this._handleRotation(parameters, true); } } })(), _animateStart:function() { if (this._timer) { clearTimeout(this._timer); } this._animateStartTime = +new Date; this._animateStartAngle = this._angle; this._animate(); }, _animate:function() { var actualTime = +new Date; var checkEnd = actualTime - this._animateStartTime > this._parameters.duration; // TODO: Bug for animatedGif for static rotation ? (to test) if (checkEnd && !this._parameters.animatedGif) { clearTimeout(this._timer); } else { if (this._canvas||this._vimage||this._img) { var angle = this._parameters.easing(0, actualTime - this._animateStartTime, this._animateStartAngle, this._parameters.animateTo - this._animateStartAngle, this._parameters.duration); this._rotate((~~(angle*10))/10); } if (this._parameters.step) { this._parameters.step(this._angle); } var self = this; this._timer = setTimeout(function() { self._animate.call(self); }, 10); } // To fix Bug that prevents using recursive function in callback I moved this function to back if (this._parameters.callback && checkEnd){ this._angle = this._parameters.animateTo; this._rotate(this._angle); this._parameters.callback.call(this._rootObj); } }, _rotate : (function() { var rad = Math.PI/180; if (IE) return function(angle) { this._angle = angle; this._container.style.rotation=(angle%360)+"deg"; this._vimage.style.top = -(this._rotationCenterY - this._imgHeight/2) + "px"; this._vimage.style.left = -(this._rotationCenterX - this._imgWidth/2) + "px"; this._container.style.top = this._rotationCenterY - this._imgHeight/2 + "px"; this._container.style.left = this._rotationCenterX - this._imgWidth/2 + "px"; } else if (supportedCSS) return function(angle){ this._angle = angle; this._img.style[supportedCSS]="rotate("+(angle%360)+"deg)"; this._img.style[supportedCSSOrigin]=this._parameters.center.join(" "); } else return function(angle) { this._angle = angle; angle=(angle%360)* rad; // clear canvas this._canvas.width = this._width;//+this._widthAdd; this._canvas.height = this._height;//+this._heightAdd; // REMEMBER: all drawings are read from backwards.. so first function is translate, then rotate, then translate, translate.. this._cnv.translate(this._imgWidth*this._aspectW,this._imgHeight*this._aspectH); // at least center image on screen this._cnv.translate(this._rotationCenterX,this._rotationCenterY); // we move image back to its orginal this._cnv.rotate(angle); // rotate image this._cnv.translate(-this._rotationCenterX,-this._rotationCenterY); // move image to its center, so we can rotate around its center this._cnv.scale(this._aspectW,this._aspectH); // SCALE - if needed this._cnv.drawImage(this._img, 0, 0); // First - we draw image } })() } if (IE) { Wilq32.PhotoEffect.prototype.createVMLNode=(function(){ document.createStyleSheet().addRule(".rvml", "behavior:url(#default#VML)"); try { !document.namespaces.rvml && document.namespaces.add("rvml", "urn:schemas-microsoft-com:vml"); return function (tagName) { return document.createElement('<rvml:' + tagName + ' class="rvml">'); }; } catch (e) { return function (tagName) { return document.createElement('<' + tagName + ' xmlns="urn:schemas-microsoft.com:vml" class="rvml">'); }; } })(); } })(jQuery); Scraped image element (uBOT) <a onclick="rotateImage('images0');"><img id="images0" src="../tmpc65821453/45ee090ad71f8f89cf85b3f826ab561c_1579084879.jpg"></a> Screenshot of the same image --> https://prnt.sc/qnz0xa If I need to provide something else, please let me know. P.S. Some of you might know what I'm trying to do and where! Any help is appreciated! Quote Link to post Share on other sites
Code Docta (Nick C.) 638 Posted January 15, 2020 Report Share Posted January 15, 2020 Hi, You can download/copy paste jquery into the "run javascript" command then do the same for your code. Regards,Nick Quote Link to post Share on other sites
maBOT 10 Posted January 16, 2020 Author Report Share Posted January 16, 2020 Hi, You can download/copy paste jquery into the "run javascript" command then do the same for your code. Regards,NickHi, Nick. Thanks for replying. I'm not sure if I understood what you want me to do? Basically, above JS code is used in the site on which I'm trying to break this captcha. The JS rotate the images on a random base (i.e. https://prnt.sc/qnz0xa)and I need a way to somehow reset the images to its original state so I can pass the captcha. As I can see each image is temporarily generated and it retain the same link regardless how may times you refresh it. This is how it looks like when you don't click, when the captcha image is loaded: <a onclick="rotateImage('images0');"><img id="images0" src="../tmpc65821453/9c067dae9a3ad64b9a89ac6f5653a695_1579144077.jpg"></a> This is how it looks like when you click it once: <a onclick="rotateImage('images0');"><img id="images01" src="../tmpc65821453/9c067dae9a3ad64b9a89ac6f5653a695_1579144077.jpg" style="transform: rotate(90deg);"></a> (full URL to generate image from the above example: https://bit.ly/2Tz9nKi) Each click it gets increment by 90deg up to 360 of course, then it resets to 0deg. I can't find the particular function "rotateImage" anywhere on their site. I hope it helps a bit now. Regards,M Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.