예제 #1
0
파일: Form1.cs 프로젝트: klekot/YaP
        private void button1_Click(object sender, EventArgs e)
        {
            rtbYandex.Clear();
            int page = 0;
            string zapros = @"http://yandex.ru/yandsearch?text=" + HttpHelper.UrlEncode(tbZapros.Text) + "&p=" + page + "&rnd=28111&numdoc=50&lr=0";
            string content = "";
            string key_captcha = "";
            string return_path_captcha = "";
            string url_captcha = "";

            request.UserAgent = HttpHelper.IEUserAgent();

            // Отправляем запрос.
            request.Referer = HttpHelper.UrlEncode(zapros);
            HttpResponse response = request.Get(zapros);
            // Принимаем тело сообщения в виде строки.
            content = response.ToString();

            HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
            HtmlNodeCollection nodes;
            doc.LoadHtml(content);

            //Парсим страницу на наличие капчи
            nodes = doc.DocumentNode.SelectNodes("//div[@class='b-captcha']");
            //И если капча есть переходим к её обработке
            if (nodes != null)
            {
                HtmlNodeCollection inputs = nodes[0].SelectNodes("//input");
                key_captcha = inputs[0].GetAttributeValue("value", "false").Replace("&amp", "");
                return_path_captcha = inputs[1].GetAttributeValue("value", "false").Replace("&", "&"); ;

                //Парсим страницу на получение тэга <img>, в котором прописана капча
                HtmlNode image = doc.DocumentNode.SelectSingleNode("//td[@class='b-captcha__layout__l']//img");
                //Получаем URL капчи (путь по которому её можно скачать)
                url_captcha = image.GetAttributeValue("src", "true");

                //Скачиваем картинку с удаленного адреса в MemoryStream
                MemoryStream stream = request.Get(url_captcha).ToMemoryStream();
                //Создаем форму ввода капчи
                FormCaptcha formCaptcha = new FormCaptcha();
                //Отображаем в PictureBox картинку с MemoryStream
                formCaptcha.pictureBox1.Image = Image.FromStream(stream);
                //Отображаем форму ввода капчи для пользователя
                formCaptcha.ShowDialog();

                request.AddUrlParam("key", HttpHelper.UrlEncode(key_captcha));
                request.AddUrlParam("retpath", HttpHelper.UrlEncode(return_path_captcha));
                request.AddUrlParam("rep", HttpHelper.UrlEncode(formCaptcha.tbPassword.Text));

                //request.AddHeader("Host","yandex.ru");
                response = request.Get(@"http://yandex.ru/checkcaptcha");
                doc.LoadHtml(response.ToString());

            }

            //Парсим страницу на блоки со ссылками
            nodes = doc.DocumentNode.SelectNodes("//div[@class='serp-list']//span[@class='serp-url__item']//a[1]");
            int count = 0;
            int pos = 0;
            if (nodes == null)
                return;
            foreach (HtmlNode node in nodes)
            {
                count++;
                rtbYandex.AppendText(count + ". " + node.InnerText + "\n");
                if ("http://".ToUpper() + node.InnerText.ToUpper() == tbSite.Text.ToUpper())
                {
                    rtbYandex.Select(pos, node.InnerText.Length + 3);
                    rtbYandex.SelectionColor = Color.Red;
                }
                pos += node.InnerText.Length + 1 + (Convert.ToString(count) + ". ").Length;
            }
        }
예제 #2
0
파일: Form1.cs 프로젝트: klekot/YaP
        private void button2_Click(object sender, EventArgs e)
        {
            YandexParser parser = new YandexParser("Yandex");

            parser.LoadPage(tbZapros.Text);

            parser.CheckCaptcha();

            while (parser.NeedCaptcha)
            {
                FormCaptcha formCaptcha = new FormCaptcha();
                formCaptcha.pictureBox1.Image = Image.FromStream(parser.GetCaptchaImage());
                formCaptcha.ShowDialog();
                if (formCaptcha.tbPassword.Text != "")
                {
                    parser.SendCaptha(formCaptcha.tbPassword.Text);
                    parser.CheckCaptcha();
                }
            }
            List<string> sites = new List<string>();
            sites = parser.ParseSitesURL();
            int pos = 0;
            if (sites != null)
            {
                for (int x = 0; x <= sites.Count - 1; x++)
                {
                    rtbYandex.AppendText(x+1 + ". " + sites[x] + "\n");
                    if ("http://".ToUpper() + sites[x].ToUpper() == tbSite.Text.ToUpper())
                    {
                        rtbYandex.Select(pos, sites[x].Length + 3);
                        rtbYandex.SelectionColor = Color.Red;
                    }
                    pos += sites[x].Length + 1 + (Convert.ToString(x) + ". ").Length;
                }

            }
        }