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)); }
/// <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); }
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; }
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); }
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); }
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()); }
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); }
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); }
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))))); }