private List <string> GetOffersLinks(string regionLink) { int switchProxyRemindCounter = 0; //счетчик количества использования одного прокси string nextPageLink = regionLink; IElement nextPageLinkDom = null; List <string> offerLinks = new List <string>(); while (true) { switchProxyRemindCounter++; string searchResultPageHtml; while (true) { searchResultPageHtml = WebHelpers.GetHtmlThrowProxy(nextPageLink, currentProxy); //скачали страницу с выдачей if (searchResultPageHtml != Constants.WebAttrsNames.NotFound) { break; } else { Console.WriteLine("Хреновый прокси! "); UpdateInternalProxy(); } } var searchResultPageDom = parser.Parse(searchResultPageHtml); //перегнали в DOM var offerLinksDom = searchResultPageDom.QuerySelectorAll(Constants.OfferListSelectors.OfferLinks); //получили все ссылки на предложения if (offerLinksDom != null) //если ссылки на странице есть, собираем в список { offerLinks.AddRange(offerLinksDom.ToList().Select(i => Resources.BaseLink + i.GetAttribute(Constants.WebAttrsNames.href))); Console.WriteLine("Добавлено предложений в список/всего: {0}/{1}, {2}", offerLinksDom.Length, offerLinks.Count, nextPageLink); } else { Console.WriteLine("На этой странице нет ссылок: {0}", nextPageLink); break; } var findNextPageButton = searchResultPageDom.QuerySelectorAll(Constants.OfferListSelectors.NextPage); //ищем кнопку на след страницу nextPageLinkDom = null; for (int o = 0; o < findNextPageButton.Length; o++) { if (findNextPageButton[o].TextContent == ">>") { nextPageLinkDom = findNextPageButton[o]; break; } } //nextPageLinkDom = searchResultPageDom.QuerySelector(Constants.OfferListSelectors.NextPage); //обращаемся к элементу, где сидит ссылка на следующую страницу выдачи if (nextPageLinkDom != null) { if (nextPageLinkDom.GetAttribute(Constants.WebAttrsNames.href) != null) { nextPageLink = nextPageLinkDom.GetAttribute(Constants.WebAttrsNames.href).Replace("//", "https://"); Console.WriteLine("Next page link: {0}", nextPageLink); } else { Console.WriteLine("Ссылки на следующую страницу нет. Закансиваем собирать ссылки этого региона, {0}.", regionLink); break; } } else { Console.WriteLine("Ссылки на следующую страницу нет.Закансиваем собирать ссылки этого региона, вероятно, на странице ошибка, {0}.", regionLink); break; } if (switchProxyRemindCounter > 10) { Console.WriteLine("Refreshing proxy..."); UpdateInternalProxy(); switchProxyRemindCounter = 0; } } return(offerLinks); }
private bool ExcludeProxyByTestLink(WebProxy i) { Console.WriteLine(i.Address); return(WebHelpers.GetHtmlThrowProxy(Resources.BaseLink, i) == Constants.WebAttrsNames.NotFound ? true : false); }