protected void ExecuteJavaScript(IWpfWebBrowser browser, string s) { try { _Logger.Debug($"Execute Javascript {s}"); if (browser.IsBrowserInitialized) { browser.ExecuteScriptAsync(s); } else { browser.LoadingStateChanged += (sender, args) => { //Wait for the Page to finish loading if (args.IsLoading == false) { browser.ExecuteScriptAsync(s); } }; } } catch (Exception e) { MessageBox.Show("Error while executing Javascript: " + e.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); } }
/// <summary> /// enters phrase in a way depending on clickerInput /// </summary> /// <param name="clickerInput">bool if clicker enabled</param> /// <param name="webBrowser">cafsharp browser interface</param> /// <param name="phrase">built search phrase</param> public async Task EnterPhraseAsync(bool clickerInput, IWpfWebBrowser webBrowser, string phrase) { _log.Called(clickerInput, string.Empty, phrase); try { if (!clickerInput) { phrase = ValidatePhrase(phrase); await webBrowser.EvaluateScriptAsync(@" var arr = document.getElementsByTagName('input')[2].value = '" + phrase + @"'; "); } else { await _inputService.ClickSearchBarInputAsync(); await _inputService.EnterPhraseInputAsync(phrase); } } catch (Exception e) { _log.Error(e.Message); } }
/// <summary> /// for processing time calls GetWaitConfiguration, calls GetNewIp /// changes browing IP, or initializes Tor if direct connection, after this calls GetPausedConfiguration or GetStoppedConfiguration depending on paused bool /// </summary> /// <param name="webBrowser">cefsharp browser interface</param> /// <param name="paused">is browsing paused bool</param> /// <returns></returns> public async Task ExecuteChangeIpButtonAsync(IWpfWebBrowser webBrowser, bool paused) { _log.Called(); //log try { _controlsService.GetWaitConfiguration(); _browseService.GetNewIp(webBrowser); //browser service await Task.Delay(1000); //display messge if (paused) { _controlsService.GetPausedConfiguration(); //ui } else { _controlsService.GetStoppedConfiguration(false); //ui } } catch (Exception e) { _log.Error(e.Message); //log } }
/// <summary> /// calls GetStartedConfiguration, if browsing is not paused, calls CollectDataAsync, in finally block calls GetStoppedConfiguration /// starts (or restarts) browsing /// </summary> /// <param name="nameList">list of searched names</param> /// <param name="webBrowser">cefsharp browser interface</param> /// <param name="searchPhrase">build searched phrase</param> /// <param name="paused">is browsing paused bool</param> public async Task ExecuteStartButtonAsync(List <string> nameList, IWpfWebBrowser webBrowser, string searchPhrase, bool paused) { _log.Called(nameList.Count, string.Empty, searchPhrase, paused); //log try { _controlsService.GetStartedConfiguration(); //ui if (!paused) { await _browseService.CollectDataAsync(nameList, webBrowser, searchPhrase); //browser service } } catch (Exception e) { _log.Error(e.Message); //log } finally { if (!paused) { _controlsService.GetStoppedConfiguration(false); //ui } } }
/// <summary> /// Метод обработки ошибки страницы /// </summary> /// <param name="browser">ссылка на компонент браузера</param> private void HandleLoadError(IWpfWebBrowser browser) { var tsk = Task.Run(async() => { LoadErrorVisible = true; //показываем страшное сообщение об ошибке ReloadBrowser(); await Task.Delay(3000); //задержка перезагрузки, чтобы снизить нагрузку на систему, реально можно BSOD поймать }); }
public FindViewModel(IWpfWebBrowser browser) { _browser = browser; _forward = true; _matchcase = false; _findnext = true; Text = ""; }
private void SubscribeToEvents(IWpfWebBrowser browser) { if (browser != null) { browser.ConsoleMessage += browser_ConsoleMessage; browser.FrameLoadStart += browser_FrameLoadStart; browser.FrameLoadEnd += browser_FrameLoadEnd; browser.LoadError += browser_LoadError; browser.NavStateChanged += browser_NavStateChanged; browser.StatusMessage += browser_StatusMessage; } }
/// <summary> /// changes connection type to Tor or direct /// </summary> /// <param name="webBrowser">cefsharp browser interface</param> public void ChangeConnectionType(IWpfWebBrowser webBrowser) { if (!SearchViaTor) { _connectionService.ConfigureBrowserTor(webBrowser); SearchViaTor = true; } else { _connectionService.ConfigureBrowserDirect(webBrowser); SearchViaTor = false; } HowManySearches = 0; }
public JavaScriptHost(IWpfWebBrowser wpfWebBrowser) { _wpfWebBrowser = wpfWebBrowser; _configuration = ServiceLocator.Current.GetInstance <Configuration>(); _statusService = ServiceLocator.Current.GetInstance <StatusService>(); _wpfWebBrowser.ConsoleMessage += (sender, e) => Debug.WriteLine("[Chromium]" + e.Message); _wpfWebBrowser.FrameLoadEnd += (sender, e) => { if (!e.Url.StartsWith("https://abema.tv/now-on-air/")) { return; } var delay = (double)_configuration.Root.Operation.Delay; Observable.Return(0).Delay(TimeSpan.FromMilliseconds(delay)).Subscribe(w => Run()); }; }
/// <summary> /// clicks html document object in a way depending on clickerInput /// </summary> /// <param name="clickerInput">bool if clicker enabled</param> /// <param name="webBrowser">cefsharp browser interface</param> public async Task ClickSearchBtnAsync(bool clickerInput, IWpfWebBrowser webBrowser) { _log.Called(clickerInput, string.Empty); try { if (!clickerInput) { await webBrowser.EvaluateScriptAsync(@" var arr = document.getElementsByTagName('input')[3].click(); "); } } catch (Exception e) { _log.Error(e.Message); } }
/// <summary> /// setting up browser for using direct connection /// </summary> /// <param name="webBrowser">cefsharp browser interface</param> public void ConfigureBrowserDirect(IWpfWebBrowser webBrowser) { _log.Called(string.Empty); try { Cef.UIThreadTaskFactory.StartNew(delegate { var rc = webBrowser.GetBrowser().GetHost().RequestContext; var v = new Dictionary <string, object>(); v["mode"] = "direct"; v["server"] = ""; string error; bool success = rc.SetPreference("proxy", v, out error); }); } catch (Exception e) { _log.Error(e.Message); } }
/// <summary> /// creates new cancellation token, calls LoopCollectingAsync /// finally disposes cancellation token /// </summary> /// <param name="nameList">list of names/phrases</param> /// <param name="webBrowser">cefsharp browser interface</param> /// <param name="searchPhrase">built search phrase</param> public async Task CollectDataAsync(List <string> nameList, IWpfWebBrowser webBrowser, string searchPhrase) { _log.Called(nameList.Count, string.Empty, searchPhrase); if (StopTS == null || StopTS.IsCancellationRequested) //if cancellation token is null or requested, create new one { StopTS = new CancellationTokenSource(); StopCT = StopTS.Token; WebBrowser = webBrowser; SearchPhrase = searchPhrase; NameList = nameList; PhraseNo = GetPhraseNo(); } Task task = Task.Run(async() => { await LoopCollectingAsync(); }, StopCT); try { await task; } catch (OperationCanceledException e) { _log.Info("Cancellation token cancelled: " + e.Message); } catch (Exception e) { _log.Error(e.Message); } finally { StopTS.Dispose(); } StopTS = null; }
/// <summary> /// checks if in the html document is captcha /// </summary> /// <param name="webBrowser">cefsharp browser interface</param> public async Task <bool> CheckForRecaptchaAsync(IWpfWebBrowser webBrowser) { _log.Called(string.Empty); try { bool isCaptcha = false; Task <JavascriptResponse> verifyReCaptcha = webBrowser.EvaluateScriptAsync(@" (function() { const arr = document.getElementsByTagName('a'); for (i = 0; i < arr.length; ++i) { item = arr[i]; if (document.getElementById('infoDiv')) { return true; } } } )();" ); await verifyReCaptcha.ContinueWith(t => { if (!t.IsFaulted) { var response = t.Result; var EvaluateJavaScriptResult = response.Success ? (response.Result ?? "null") : response.Message; isCaptcha = Convert.ToBoolean(response.Result); } } ); return(isCaptcha); } catch (Exception e) { _log.Error(e.Message); return(true); } }
/// <summary> /// sets new browsing IP /// </summary> /// <param name="webBrowser">cefsharp browser interface</param> public void GetNewIp(IWpfWebBrowser webBrowser) { _log.Called(string.Empty); try { if (SearchViaTor) { _connectionService.InitializeTor(); } else { ChangeConnectionType(webBrowser); } HowManySearches = 0; } catch (Exception e) { _log.Error(e.Message); } }
/// <summary> /// searches for URL data in html document /// </summary> /// <param name="webBrowser">cefsharp browser interface</param> /// <returns>string tag data</returns> public async Task <string> GetUrlAsync(IWpfWebBrowser webBrowser) { _log.Called(string.Empty); try { string url = ""; Task <JavascriptResponse> findUrl = webBrowser.EvaluateScriptAsync(@" (function() { var results = document.getElementsByClassName('srg')[0]; var result = results.getElementsByClassName('g')[0]; var div = result.getElementsByTagName('div')[0]; return div.innerHTML; } )();" ); await findUrl.ContinueWith(t => { if (!t.IsFaulted) { var response = t.Result; var EvaluateJavaScriptResult = response.Success ? (response.Result ?? "null") : response.Message; url = Convert.ToString(response.Result); } } ); url = SplitUrl(url); return(url); } catch (Exception e) { _log.Error(e.Message); return(string.Empty); } }
/// <summary> /// switches off JS alerts /// </summary> /// <param name="webBrowser">cefsharp browser interface</param> public async Task TurnOffAlertsAsync(IWpfWebBrowser webBrowser) { await webBrowser.EvaluateScriptAsync(@" window.alert = function(){} " ); }
public WebElement(IWpfWebBrowser browser, string xpath) { _browser = browser; _xpath = xpath; }
private void OnBrowserCreated(object sender, IWpfWebBrowser browser) { browser.RegisterJsObject("act", new BrowserBindings()); // FIXME: Make it possible to create more than one window. // Tie loading html to the browser window creation and bindings to the // browser creation. browser.Load(settingsTab.HTMLFile()); }