Beispiel #1
0
        /// <summary>
        /// Получает данные о штатах со страницы https://www.trulia.com/property-sitemap/ и записывает в БД
        /// </summary>
        public static void GetStateListToDb()
        {
            var driver = new PhantomJSDriver(ProxySolver.GetServiceForDriver());

            driver.Manage().Window.Size = new System.Drawing.Size(1920, 1080);
            string statesLink = "https://www.trulia.com/property-sitemap/";

            driver.Navigate().GoToUrl(statesLink);
            var linksElemsList = driver.FindElementsByCssSelector(".content .cols12 li a");

            foreach (var linkElem in linksElemsList)
            {
                Console.WriteLine(linkElem.GetAttribute(Constants.WebAttrsNames.href) + ",   " + linkElem.Text.Remove(linkElem.Text.Length - 7, 6));
                SqlCommand insertState = DataProvider.Instance.CreateSQLCommandForSP(Resources.SP_AddNewState);
                insertState.Parameters.AddWithValue("@StateName", linkElem.Text.Remove(linkElem.Text.Length - 7, 6));
                insertState.Parameters.AddWithValue("@Link", linkElem.GetAttribute(Constants.WebAttrsNames.href));
                DataProvider.Instance.ExecureSP(insertState);
            }
            driver.Quit();
        }
Beispiel #2
0
        private static PhantomJSDriver CreateDriver()
        {
            PhantomJSDriver driver;

            while (true)
            {
                try
                {
                    driver = new PhantomJSDriver(ProxySolver.GetServiceForDriver());
                    driver.Manage().Window.Size = new System.Drawing.Size(1920, 1080);
                    driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(20);
                    //OpenQA.Selenium.Proxy prx = new Proxy()
                    break;
                }
                catch (Exception ex)
                {
                    logger.Error(ex, "Ошибка создания драйвера: {0},{1}", ex.Message, ex.StackTrace);
                }
            }

            return(driver);
        }
Beispiel #3
0
        public static void GetCityListToDb(State state)
        {
            while (true)
            {
                PhantomJSDriver driver;
                while (true)
                {
                    try
                    {
                        driver = new PhantomJSDriver(ProxySolver.GetServiceForDriver());
                        break;
                    }
                    catch (Exception ex)
                    {
                        logger.Error(ex, "Ошибка создания драйвера: {0},{1}", ex.Message, ex.StackTrace);
                    }
                }

                try
                {
                    driver.Manage().Window.Size = new System.Drawing.Size(1920, 1080);
                    driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(20);
                    while (true)
                    {
                        try
                        {
                            driver.Navigate().GoToUrl(state.Link);
                            break;
                        }
                        catch (Exception ex)
                        {
                            logger.Trace(ex, "Ошибка получения страницы, время ожидания истекло. {0},{1}", ex.Message, ex.StackTrace);
                            driver.Quit();
                            driver = new PhantomJSDriver(ProxySolver.GetServiceForDriver());
                            driver.Manage().Window.Size = new System.Drawing.Size(1920, 1080);
                            driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(20);
                        }
                    }

                    while (true)
                    {
                        var citylinks = driver.FindElementsByCssSelector("dl a");


                        foreach (var a in citylinks)
                        {
                            string Text = a.Text;
                            Text = Text.Remove(Text.Length - 7, 6);
                            string href = a.GetAttribute(Constants.WebAttrsNames.href);
                            //Console.WriteLine("City: {0}, Link: {1}, Count: {2}", Text.Replace(Text.Split(' ')[0], String.Empty), href, Int32.Parse(Text.Split(' ')[0].Replace(",", String.Empty)));
                            SqlCommand insertCity = DataProvider.Instance.CreateSQLCommandForSP(Resources.SP_AddNewCity);
                            insertCity.Parameters.AddWithValue("@StateName", state.StateName);
                            insertCity.Parameters.AddWithValue("@Link", href);
                            insertCity.Parameters.AddWithValue("@CityName", Text.Replace(Text.Split(' ')[0], String.Empty));
                            insertCity.Parameters.AddWithValue("@Count", Int32.Parse(Text.Split(' ')[0].Replace(",", String.Empty)));
                            DataProvider.Instance.ExecureSP(insertCity);
                        }
                        var nextButtons = driver.FindElementsByCssSelector("*[rel=next]");
                        if (nextButtons.Count > 0)
                        {
                            while (true)
                            {
                                try
                                {
                                    nextButtons[0].Click();
                                    break;
                                }
                                catch (OpenQA.Selenium.WebDriverTimeoutException ex)
                                {
                                    //throw new Exception();
                                    logger.Trace(ex, "Ошибка получения страницы, время ожидания истекло.");
                                    logger.Error(ex, "Ошибка получения страницы, время ожидания истекло.");
                                }
                                catch (OpenQA.Selenium.StaleElementReferenceException ex)
                                {
                                    //throw new Exception();
                                    logger.Trace(ex, "Отсутствует данный Элемент на странице(кнопка Next)");
                                    logger.Error("Отсутствует данный Элемент на странице(кнопка Next)");
                                    break;
                                }
                                catch (Exception ex)
                                {
                                    logger.Error(ex, "Неизвестная ошибка: {1}, {0}", ex.StackTrace, ex.Message);
                                    logger.Trace(ex, "Неизвестная ошибка: {1}, {0}", ex.StackTrace, ex.Message);
                                    throw;
                                }
                            }
                        }
                        else
                        {
                            break;
                        }
                    }
                    driver.Quit();
                    break;
                }
                catch (OpenQA.Selenium.WebDriverException ex)
                {
                    driver.Quit();
                    logger.Error(ex, "Возникло исключение web-драйвера: {1}, {0}", ex.StackTrace, ex.Message);
                }
            }
            //foreach (var linkElem in linksElemsList)
            //{
            //    Console.WriteLine(linkElem.GetAttribute(Constants.WebAttrsNames.href) + ",   " + linkElem.Text.Replace(" homes", String.Empty));
            //    SqlCommand insertState = DataProvider.Instance.CreateSQLCommandForSP(Resources.SP_AddNewState);
            //    insertState.Parameters.AddWithValue("@StateName", linkElem.Text.Replace(" homes", String.Empty));
            //    insertState.Parameters.AddWithValue("@Link", linkElem.GetAttribute(Constants.WebAttrsNames.href));
            //    DataProvider.Instance.ExecureSP(insertState);
            //}
        }