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