@largotek

Почему webbrowser не корректно отрабатывает ?

Добрый вечер, знатоки.

Есть задача, авторизации и сбора инфы с сайта.

Первая проблема была в авторизации, так как там динамическая капча. Просто скачать по урлу нельзя так как капча динамическая(сорри за каламбур) и каждый раз картинка разная. Решение в том что бы использовать webBrowser и от туда уже вытаскивать картинку. Помогло решение вот отсюда www.cyberforum.ru/visual-basic/thread903024.html#p...

string uri = "http://joblab.ru/access.php/";
            
            result = new string[] { "", "" };

            webBrowser1.Navigate(uri);
            webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
            while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
            {
                Application.DoEvents();
            }

            IHTMLDocument2 doc = (IHTMLDocument2)webBrowser1.Document.DomDocument;
            IHTMLControlRange imgRange = (IHTMLControlRange)((HTMLBody)doc.body).createControlRange();

            foreach (IHTMLImgElement img in doc.images)
            {
                imgRange.add((IHTMLControlElement)img);

                imgRange.execCommand("Copy", false, null);

                using (Bitmap bmp = (Bitmap)Clipboard.GetDataObject().GetData(DataFormats.Bitmap))
                {
                    if (img.nameProp.Contains("PHPSESSID"))
                    {
                        Image imgCpt = bmp;
                        string captch = CaptchaWindow.Show(imgCpt);
                        string cookValue = img.nameProp.Replace("index.php?PHPSESSID=", "");
                        result = new string[2];
                        result[0] = captch;
                        result[1] = cookValue;
                        cook = cookValue;
                    }
                }
            }

            webBrowser1.Document.GetElementById("auth_name_job").SetAttribute("value", login);
            webBrowser1.Document.GetElementById("pass").SetAttribute("value", pass);
            webBrowser1.Document.GetElementById("keystring").SetAttribute("value", result[0]);

            foreach (HtmlElement he in webBrowser1.Document.GetElementsByTagName("input"))
            {
                if (he.GetAttribute("value").Equals("employer"))
                {
                    he.InvokeMember("click");
                    break;
                }
            }

            foreach (HtmlElement he in webBrowser1.Document.GetElementsByTagName("input"))
            {
                if (he.GetAttribute("value").Equals("Войти"))
                {
                    he.InvokeMember("click");
                    break;
                }
            }


Дальше же, нормально собирается все , но после определенного количества запросов выходит страница где нужно ввести капчу. И вроде бы нужно сделать так же как до этого но возникает ошибка.

Делаем точно так же , но в Navigate вставляем другой урл. И все, не хочет работать. Почему так происходит? Понимаю что у меня не достаток знаний платформы, и не знаю как грамотно использовать эти элементы вот и прошу помощи у гуру.
  • Вопрос задан
  • 2581 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы