Esempio n. 1
0
        public static void ChromedriverDispose(ChromeDriverHelper helper)
        {
            string ids = string.Join(", ", helper.AttachedProcessesIds);

            try
            {
                helper.ChromeDriver.Quit();
                helper.AttachedProcessesIds.ForEach(s =>
                {
                    try
                    {
                        var proc = Process.GetProcessById(int.Parse(s));
                        killProc(proc);
                    }
                    catch
                    { }
                });
                helper.AttachedProcessesIds = new List <string>();
                File.WriteAllLines(Directory.GetCurrentDirectory() + "\\drivers.txt", chromeDriversIds);
                ChromeDriverHelpers.Remove(helper);
                helper = null;
            }
            catch (Exception e)
            {
                throw new Exception("ids(" + ids + "): " + e.Message);
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Returns a new chromedriver instance with given parameters, and saves its information.
        /// Each set_up must be followed by dispose or disposeAll.
        /// It's possible that some other chrome tabs(even in normal browsers) created during execution of this function are closed at later disposal
        /// It's better off launching projects with this function as administrator.
        /// To force so: create app.manifest and set it there: tag + "requestedExecutionLevel level = "requireAdministrator" uiAccess="false" />"
        /// /**/
        /// </summary>
        /// <param name="visible">False if chrome must run silently</param>
        /// <param name="ignoreSetificateErrors"></param>
        /// <param name="proxyServer">IPAddress:Port</param>
        /// <param name="proxyWithAuthentication"></param>
        /// <param name="extensionPaths">Leave it empty or null not to use a consistant chrome profile</param>
        /// <returns></returns>
        public static ChromeDriverHelper ChromedriverSetUp(ChromeDriverSetUpOptions setUpOptions)
        {
            try
            {
                #region create service and options
                //create instance
                var service = ChromeDriverService.CreateDefaultService();
                service.HideCommandPromptWindow = true;
                var options = new ChromeOptions();
                #region set options
                try
                {
                    options.AddArgument("--enable-extensions");
                    options.AddArgument("--start-maximized");
                    #region proxy
                    if (setUpOptions.ProxyServer != "")
                    {
                        Proxy proxy = new Proxy()
                        {
                            Kind          = ProxyKind.Manual,
                            IsAutoDetect  = false,
                            SocksUserName = setUpOptions.ProxyLogin != null ? setUpOptions.ProxyLogin : "",
                            SocksPassword = setUpOptions.ProxyPassword != null ? setUpOptions.ProxyPassword : "",
                            HttpProxy     = setUpOptions.ProxyServer, //"127.0.0.1:3330",
                            SslProxy      = setUpOptions.ProxyServer  //"127.0.0.1:3330"
                        };
                        options.Proxy = proxy;
                    }
                    #endregion
                    #region set visibility
                    try
                    {
                        if (!setUpOptions.Visible)
                        {
                            options.AddArgument("headless");
                        }
                    }
                    catch (Exception e)
                    {
                        throw new Exception("Can't set visibility. " + e.Message);
                    }
                    #endregion
                    #region set extensions
                    try
                    {
                        if (setUpOptions.ExtensionsPaths != null)
                        {
                            foreach (var extension in setUpOptions.ExtensionsPaths)
                            {
                                if (!string.IsNullOrEmpty(extension))
                                {
                                    options.AddArgument("--load-extension=" + extension);
                                }
                            }
                        }
                        //options.AddExtension(extension);
                    }
                    catch (Exception e)
                    {
                        throw new Exception("Can't set chrome extensions: " + e.Message);
                    }
                    #endregion
                    #region set ignore sertificate errors
                    try
                    {
                        if (setUpOptions.IgnoreSertivicateErrors)
                        {
                            options.AddArgument("ignore-certificate-errors");
                        }
                    }
                    catch (Exception e)
                    {
                        throw new Exception("Can't set ignore certificate errors. " + e.Message);
                    }
                    #endregion
                }
                catch (Exception e)
                { throw new Exception("Can't set options: " + e.Message); }
                #endregion
                #endregion

                var chromeRelatedIds = getChromeRelatedProcesses();
                //WaitSmoothly.Do(1.5);
                //initialize chromedriver
                ChromeDriver chrome = new ChromeDriver(service, options, new TimeSpan(0, 1, 0));
                //chrome.Manage().Cookies.DeleteAllCookies();
                Wait.Do(1.5);
                //get chrome related processes after initialization. Can throw error that access denied. Dealt away with running as administaror
                var latestChromeRelatedIds = getChromeRelatedProcesses();
                Wait.Do(1.5);
                //save newly created processes' ids to list
                lastCreatedDriverIds = new List <string>();
                lastCreatedDriverIds = latestChromeRelatedIds
                                       .Where(s => !chromeRelatedIds.Any(a => a.Id == s.Id))
                                       .Select(s => s.Id.ToString())
                                       .ToList();
                //save new helper to list
                var lastHelper = new ChromeDriverHelper()
                {
                    ChromeDriver = chrome, AttachedProcessesIds = lastCreatedDriverIds
                };
                ChromeDriverHelpers.Add(lastHelper);
                //save newly created processees' ids to a file
                File.AppendAllLines(Directory.GetCurrentDirectory() + "\\drivers.txt", lastCreatedDriverIds);
                return(lastHelper);
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }