?

Log in

Previous Entry | Next Entry

Наконец настал тот день когда мои руки дошли до замечательного на первый взгляд, а может и не толькоязыка C# и платформы .NET .  Собственно говоря как я пришел к тому что начал ее использовать?  Сижу играюсь в свою любимую игрушку "Грани Реальность" -browser online game. И думаю : "Чёрт!, заманалось клацать рубить тилью каждые 10 минут , а может мне автоматизировать это всё?" вот здесь я и решил что нужно написать браузер который будет автоматизировать нужные мне действия которые повторяются n-ое количество раз.Проект назвал eBro - Ereality Browser

Далее настал выбор на чем писать , взгляд мой упал на две вещи :
  1. Использовать WebKit через QT
  2. Использовать средства .NET и наконец то познакомится с языком C#
Ну и как вы понимаете выбрал я C# .NET так как знаю что  Microsoft создала такое чудо как .NET Framework которое уменьшает время которое должно быть затрачено на разработку. А тратить много времени мне и не хотелось:)

В итоге я скачал Visual Studio 2008 для студента, две книги это :
  1. C# 2005 и платформа .NET для профессионалов ( Русская версия)
  2. Microsoft Visual C# 2008 базовый курс (Русская версия)
В итоге использовал я только первую книгу и только одну её Часть "Коммуникации", Глава " Доступ в интернет" .
Там я увидел примеры работы с HTTP 1.1 через классы WebResponse, WebRequest .

После всего этого я поставил себе цель сделать авто логин на сайт. Подумал что в этом деле мне поможет работа на прямую с классом WebRequest . Пошел на msdn и начал читать всё что с ним связано смотреть примеры и т.д. В итоге я получил некий программный модуль который авторизировал меня на сайте вот даже он :



            Uri url = new Uri("http://www.site.ru/login.html");
 
            WebClient client = new WebClient();
 
            client.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
            client.Headers.Add("User-Agent", "User-Agent:Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.2.15 Version/10.00");
            client.Headers.Add("Accept", "text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1");
            client.Headers.Add("Accept-Language", "ru-RU,ru;q=0.9,en;q=0.8");
            client.Headers.Add("Accept-Charset", "iso-8859-1, utf-8, utf-16, *;q=0.1");
            client.Headers.Add("Accept-Encoding", "deflate, gzip, x-gzip, identity, *;q=0");
            client.Headers.Add("Referer", "http://www.site.ru/login.html");
 
 
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.CookieContainer = new CookieContainer();
 
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Cookie[] arr_cook = new Cookie[response.Cookies.Count];
            response.Cookies.CopyTo(arr_cook, 0);
            string str_cookie = "";
            for (int i = 0; i < arr_cook.Length; i++)
            {
                str_cookie += arr_cook[i].ToString() + ";";
            }
                     
            client.Headers.Add("Cookie",str_cookie);
 
 
            // Create a new NameValueCollection instance to hold some custom parameters to be posted to the URL.

            NameValueCollection collection = new NameValueCollection();
 
            // Add necessary parameter/value pairs to the name/value container.

            collection.Add("login", "admin");
            collection.Add("password", "123456");
            collection.Add("var", "on");
            collection.Add("send_data", "Enter");
 
            // Upload the NameValueCollection.

            byte[] responseArray = client.UploadValues(url, "POST", collection);
 
            // Decode and display the response.

            string responseString = Encoding.Default.GetString(responseArray);


Вот так выглядела либо первая либо вторая версия авторизации на сайте , но проблема в том что мне нужно было организовать взаимодействие с component WebBrowser и я не знал может в силу того что я один день занимался этим либо просто этого нельзя было сделать но я пошел на форум сначало на cyberforum, долго ждал ответа но так и не дождался, потом немного подумал и решил зайти на форум msdn(русский вариант) , там  мне тоже не дали ответ а в от в английском msdn дали, и с ответом дали немного другое решение данной проблемы(Люди не бойтесь идти на английские форумы и спрашивать даже если вы плохо знаете англ. как я шанс что там помогут верным овтетом больше чем на рус форуме). В общем ниже приведу альтернативу решение моей задачи напомню "Автовход на сайт" :


            webBrowser1.Document.GetElementById("login").SetAttribute("value", "admin");
            webBrowser1.Document.GetElementById("password").SetAttribute("value", "123456");
            foreach (HtmlElement he in webBrowser1.Document.All)
            {
                if (he.Name == "val")
                {
                    he.SetAttribute("value", "on");
                }
            }
            foreach (HtmlElement he in webBrowser1.Document.All)
            {
                if (he.GetAttribute("type") == "submit")
                {
                    he.InvokeMember("click");
                }
            }
Немного переделав данный участок кода я выполнил первую часть своего проекта это авто вход на сайт и переопределил алгоритм выполнения поставленных мной задачи теперь я решил не работать с HTTP протоколом а работать с DOM полученым из браузера.

На этом пока всё дальше я вам расскажу как я организовывал имитацию нажатия на нужные ссылки,кнопки сайта...

Спасибо за внимание с вами был GooD][Man до новых встреч !