private DateTime?GetDate(JSValue iJSValue)
        {
            if (!iJSValue.IsObject)
            {
                return(null);
            }

            JSObject ob = iJSValue;

            if (ob == null)
            {
                return(null);
            }

            JSObject ko = _IWebView.ExecuteJavascriptWithResult("ko");

            if ((bool)ko.Invoke("isDate", iJSValue) == false)
            {
                return(null);
            }

            int year        = (int)ob.Invoke("getFullYear", null);
            int month       = (int)ob.Invoke("getMonth", null) + 1;
            int day         = (int)ob.Invoke("getDate", null);
            int hour        = (int)ob.Invoke("getHours", null);
            int minute      = (int)ob.Invoke("getMinutes", null);
            int second      = (int)ob.Invoke("getSeconds", null);
            int millisecond = (int)ob.Invoke("getMilliseconds", null);

            return(new DateTime(year, month, day, hour, minute, second, millisecond));
        }
示例#2
0
        /// <summary>
        /// Utility method to get global namespace of specified name if it exists,
        /// or create it if not.
        /// </summary>
        /// <param name="screen">The screen to create the global namespace for.</param>
        /// <param name="nameSpace">The name of the namespace.</param>
        /// <param name="create">Whether to create the namespace if it doesn't exist, yet.</param>
        /// <returns>The namespace.</returns>
        private static JSObject GetNamespace(IWebView screen, string nameSpace, bool create)
        {
            var ns = screen.ExecuteJavascriptWithResult("window." + nameSpace);

            if (ns.IsObject)
            {
                return(ns);
            }
            if (create)
            {
                // Not an object, but if there is something there, log a warning, as we're overwriting it.
                if (!ns.IsUndefined && !ns.IsNull)
                {
                    Logger.Warn("Possibly overwriting a global object '{0}'.", nameSpace);
                }
                return(screen.ExecuteJavascriptWithResult("window." + nameSpace + " = {};"));
            }
            return(JSValue.Undefined);
        }
示例#3
0
        private static JSObject CreateResponse(IWebView webView, String finalUri, JSObject context)
        {
            JSObject response = webView.ExecuteJavascriptWithResult("new Object()");

            response["status"]       = (uint)404;
            response["statusText"]   = "Page not found";
            response["readyState"]   = (ushort)ReadyState.UNSENT;
            response["context"]      =
                response["finalUrl"] = finalUri.ToString();

            return(response);
        }
        private JSObject GetKo()
        {
            if (_Ko == null)
            {
                _Ko = _IWebView.ExecuteJavascriptWithResult("ko");
                if (_Ko == null)
                {
                    throw ExceptionHelper.NoKo();
                }
            }

            return(_Ko);
        }
        public static Task<IAwesomeBinding> Bind(IWebView view, string iViewModel, Action First = null, Action CleanUp = null)
        {
            TaskCompletionSource<IAwesomeBinding> tcs = new TaskCompletionSource<IAwesomeBinding>();

            view.ExecuteWhenReady(() =>
            {
                if (First != null) First();
                JSObject json = view.ExecuteJavascriptWithResult("JSON");
                var root = json.Invoke("parse", new JSValue(iViewModel));

                var injector = new JavascriptSessionInjector(view, new GlobalBuilder(view, "MVVMGlue"), null);
                var mappedroot = injector.Map(root, null);
                injector.RegisterInSession(mappedroot);

                tcs.SetResult(new StringBinding(mappedroot, injector, CleanUp));
            });

            return tcs.Task;
        }
示例#6
0
        public static async Task <decimal> GetAmazonBalanceAsync(this IWebView view)
        {
            decimal balance          = -1;
            string  amazonBalance    = String.Empty;
            string  amazonBalanceUrl = "https://www.amazon.com/gc/redeem/";

            if (view.Source.ToString().ToLower().Contains(amazonBalanceUrl) == false)
            {
                await view.WaitPageLoadComplete(() =>
                {
                    view.Source = amazonBalanceUrl.ToUri();
                });
            }

            amazonBalance = view.ExecuteJavascriptWithResult("document.querySelector('#gc-current-balance').innerHTML").ToString();

            decimal.TryParse(amazonBalance.Replace("$", String.Empty), out balance);

            return(balance);
        }
示例#7
0
        public static Task <IAwesomeBinding> Bind(IWebView view, string iViewModel, Action First = null, Action CleanUp = null)
        {
            TaskCompletionSource <IAwesomeBinding> tcs = new TaskCompletionSource <IAwesomeBinding>();

            view.ExecuteWhenReady(() =>
            {
                if (First != null)
                {
                    First();
                }
                JSObject json = view.ExecuteJavascriptWithResult("JSON");
                var root      = json.Invoke("parse", new JSValue(iViewModel));

                var injector   = new JavascriptSessionInjector(view, new GlobalBuilder(view, "MVVMGlue"), null);
                var mappedroot = injector.Map(root, null);
                injector.RegisterInSession(mappedroot);

                tcs.SetResult(new StringBinding(mappedroot, injector, CleanUp));
            });

            return(tcs.Task);
        }
示例#8
0
        void IAngularInterface.SetModel(string clientId, string modelJson)
        {
            dynamic window = (JSObject)_webView.ExecuteJavascriptWithResult("window");

            window.setModel(modelJson);
        }
 public HTML.Core.V8JavascriptObject.IJavascriptObject GetGlobal()
 {
     return(_IWebView.ExecuteJavascriptWithResult("window").Convert());
 }
示例#10
0
        public static BitmapImage GetCaptchaData(this IWebView view)
        {
            int top;
            int left;
            int width;
            int height;

            JSObject obj = view.ExecuteJavascriptWithResult("document.querySelector('.gc-captcha-image').getBoundingClientRect()");

            left   = (int)obj["left"];
            width  = (int)obj["width"];
            top    = (int)obj["top"];
            height = (int)obj["height"];

            byte[] binaryData = new byte[] { };

            BitmapSurface surface      = view.Surface as BitmapSurface;
            BitmapSource  bitmapSource = null;

            if (surface == null)
            {
                try
                {
                    Awesomium.Windows.Controls.WebViewPresenter presenter = view.Surface as Awesomium.Windows.Controls.WebViewPresenter;
                    bitmapSource = presenter.Image as BitmapSource;
                }
                catch (NullReferenceException ex)
                {
                }
            }

            if (bitmapSource != null)
            {
                using (MemoryStream outStream = new MemoryStream())
                {
                    BitmapEncoder enc = new PngBitmapEncoder();
                    enc.Frames.Add(BitmapFrame.Create(bitmapSource));
                    enc.Save(outStream);

                    Rectangle cropRect = new Rectangle(left, top, width, height);
                    Bitmap    src      = Image.FromStream(outStream) as Bitmap;
                    Bitmap    target   = new Bitmap(cropRect.Width, cropRect.Height);

                    using (Graphics g = Graphics.FromImage(target))
                    {
                        g.DrawImage(src, new Rectangle(0, 0, target.Width, target.Height),
                                    cropRect,
                                    GraphicsUnit.Pixel);
                    }

                    //target.Save(@"captcha\yourfile.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);

                    using (MemoryStream ms = new MemoryStream())
                    {
                        target.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
                        binaryData = ms.ToArray();
                    }
                }
            }

            BitmapImage bitmap = new BitmapImage();

            bitmap.BeginInit();
            bitmap.StreamSource = new MemoryStream(binaryData);
            bitmap.EndInit();

            return(bitmap);
        }
示例#11
0
        public static async Task <decimal> ValidateAmazonAsync(this IWebView view, string username, string password, string claimcode, CancellationToken ct, int delayMS)
        {
            Application.Current.MainWindow.Dispatcher.Invoke(() => { ((MainWindow)Application.Current.MainWindow).browserPlaceHolder.GetChildOfType <System.Windows.Controls.Canvas>().Background = System.Windows.Media.Brushes.Gray; });

            string amazonValidateInUrl = "https://www.amazon.com/gc/redeem/";

            if (view.Source.ToString().ToLower().Contains(amazonValidateInUrl) == false)
            {
                await view.WaitPageLoadComplete(() =>
                {
                    view.Source = amazonValidateInUrl.ToUri();
                },
                                                ct : ct);
            }

            await view.WaitPageLoadComplete(() =>
            {
                view.Reload(false);
            }, ct : ct);

            view.ExecuteJavascript(string.Format("document.querySelector('#gc-redemption-input').value='{0}'", claimcode));

            await Task.Delay(250);

            view.ExecuteJavascript("document.querySelector('#gc-redemption-check-value input').click()");

            await Task.Delay(delayMS);

            string  gcValue;
            bool    codeError    = false;
            bool    captchaError = false;
            decimal parsedValue  = -1;

            while (true)
            {
                gcValue      = HttpUtility.HtmlDecode(view.ExecuteJavascriptWithResult("document.querySelector('#gc-redemption-check-value-heading').innerHTML").ToString());
                codeError    = bool.Parse(view.ExecuteJavascriptWithResult("document.querySelector('#gc-redemption-error') ? (document.querySelector('#gc-redemption-error').innerHTML.toLowerCase().indexOf('claim code is invalid')>-1 ? true : false) : false").ToString());
                captchaError = bool.Parse(view.ExecuteJavascriptWithResult("document.querySelector('#gc-redemption-captcha') ? (document.querySelector('#gc-redemption-captcha').innerHTML.toLowerCase().indexOf('security verification')>-1 ? true : false) : false").ToString());

                if (codeError)
                {
                    break;
                }

                if (captchaError)
                {
                    captchaSolvedSignal = new SemaphoreSlim(0, 1);
                    //  Application.Current.MainWindow.Dispatcher.Invoke(() => { ((MainWindow)Application.Current.MainWindow).browserPlaceHolder.IsEnabled = true; });
                    // Application.Current.MainWindow.Dispatcher.Invoke(() => { MessageBox.Show("Captcha Detected. Enter Captcha and manually click 'check'."); });

                    while (true)
                    {
                        await Task.Delay(500);

                        gcValue   = HttpUtility.HtmlDecode(view.ExecuteJavascriptWithResult("document.querySelector('#gc-redemption-check-value-heading').innerHTML").ToString());
                        codeError = bool.Parse(view.ExecuteJavascriptWithResult("document.querySelector('#gc-redemption-error') ? (document.querySelector('#gc-redemption-error').innerHTML.toLowerCase().indexOf('claim code is invalid')>-1 ? true : false) : false").ToString());
                        if (codeError)
                        {
                            Application.Current.MainWindow.Dispatcher.Invoke(() => { ((MainWindow)Application.Current.MainWindow).CaptchaPanel.Visibility = Visibility.Hidden; });
                            return(parsedValue);
                        }

                        if (gcValue == null || gcValue == "undefined" || gcValue == "null" || gcValue == "")
                        {
                            await Task.Delay(500);

                            var captchaImageData = view.GetCaptchaData();
                            var captchaResult    = SolveCaptcha_Tesseract(captchaImageData.BitmapImageToBitmap());
                            if (captchaResult.Key < .6)
                            {
                                await Application.Current.MainWindow.Dispatcher.Invoke(async() =>
                                {
                                    ((MainWindow)Application.Current.MainWindow).CaptchaPanel.Visibility = Visibility.Visible;
                                    ((MainWindow)Application.Current.MainWindow).CaptchaImage.Source     = captchaImageData;

                                    await captchaSolvedSignal.WaitAsync();

                                    captchaResult = new KeyValuePair <float, string>(1, ((MainWindow)Application.Current.MainWindow).txtCaptchaResult.Text);

                                    ((MainWindow)Application.Current.MainWindow).txtCaptchaResult.Text = string.Empty;
                                });
                            }


                            view.ExecuteJavascript(string.Format("document.querySelector('input[name=\"captchaInput\"]').value='{0}'", captchaResult.Value));

                            await Task.Delay(250);

                            view.ExecuteJavascript("document.querySelector('#gc-redemption-check-value input').click()");
                        }


                        try
                        {
                            await Task.Delay(500);

                            string gcParsedClaimCode = HttpUtility.HtmlDecode(view.ExecuteJavascriptWithResult("document.querySelector('#gc-redemption-check-value-result-box span').innerHTML").ToString()).Split()[2].ToLower();
                            gcValue = HttpUtility.HtmlDecode(view.ExecuteJavascriptWithResult("document.querySelector('#gc-redemption-check-value-heading').innerHTML").ToString());

                            if (gcParsedClaimCode == claimcode.Replace("-", "").ToLower())
                            {
                                decimal.TryParse(gcValue.Split()[0].Replace("$", ""), out parsedValue);
                                Application.Current.MainWindow.Dispatcher.Invoke(() => { ((MainWindow)Application.Current.MainWindow).CaptchaPanel.Visibility = Visibility.Hidden; });
                                return(parsedValue);
                            }
                            else
                            {
                            }
                        }
                        catch (IndexOutOfRangeException ex)
                        {
                        }
                        //else
                        //{
                        //    //await Application.Current.MainWindow.Dispatcher.Invoke(async () =>
                        //    //{
                        //    //    ((MainWindow)Application.Current.MainWindow).CaptchaPanel.Visibility = Visibility.Visible;
                        //    //    ((MainWindow)Application.Current.MainWindow).CaptchaImage.Source = await view.GetCaptchaData();
                        //    //    await captchaSolvedSignal.WaitAsync();

                        //    //    await Task.Delay(250);
                        //    //    view.ExecuteJavascript(string.Format("document.querySelector('input[name=\"captchaInput\"]').value='{0}'", ((MainWindow)Application.Current.MainWindow).txtCaptchaResult.Text));

                        //    //    view.ExecuteJavascript("document.querySelector('#gc-redemption-check-value input').click()");
                        //    //});

                        //    //continue;
                        //}
                    }
                }

                if (gcValue == null || gcValue == "undefined" || gcValue == "null" || gcValue == "")
                {
                    //await view.WaitPageLoadComplete(() =>
                    //{
                    //    view.Reload(false);
                    //});
                    await Task.Delay(delayMS);

                    continue;
                }
                else
                {
                    gcValue = HttpUtility.HtmlDecode(view.ExecuteJavascriptWithResult("document.querySelector('#gc-redemption-check-value-heading').innerHTML").ToString());

                    string gcParsedClaimCode = HttpUtility.HtmlDecode(view.ExecuteJavascriptWithResult("document.querySelector('#gc-redemption-check-value-result-box span').innerHTML").ToString()).Split()[2].ToLower();

                    if (gcParsedClaimCode == claimcode.Replace("-", "").ToLower())
                    {
                        decimal.TryParse(gcValue.Split()[0].Replace("$", ""), out parsedValue);
                        return(parsedValue);
                    }
                    else
                    {
                        continue;
                    }
                }
            }


            return(parsedValue);
        }
示例#12
0
 public JSValue CreateDate(DateTime dt)
 {
     return(_IWebView.EvaluateSafe(() =>
                                   _IWebView.ExecuteJavascriptWithResult(string.Format("new Date({0})",
                                                                                       string.Join(",", dt.Year, dt.Month - 1, dt.Day, dt.Hour, dt.Minute, dt.Second, dt.Millisecond)))));
 }