Exemple #1
0
 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);
     }
 }
Exemple #2
0
        /// <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 поймать
     });
 }
Exemple #6
0
 public FindViewModel(IWpfWebBrowser browser)
 {
     _browser   = browser;
     _forward   = true;
     _matchcase = false;
     _findnext  = true;
     Text       = "";
 }
Exemple #7
0
 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;
 }
Exemple #9
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());
     };
 }
Exemple #10
0
        /// <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;
        }
Exemple #13
0
        /// <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);
            }
        }
Exemple #15
0
        /// <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);
            }
        }
Exemple #16
0
        /// <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(){}
			"            );
        }
Exemple #17
0
 public WebElement(IWpfWebBrowser browser, string xpath)
 {
     _browser = browser;
     _xpath   = xpath;
 }
Exemple #18
0
 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());
 }