2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 C# отрыть Firefox, ввести пароль и нажать на ссылку.
Сообщение06.12.2011, 19:56 
Добрый день!

Я хотел бы написать на C# программу, которая бы делал следующее: открывала Firefox, загружала определенную страницу, вводила пароль и нажимал на ссылку.

У меня небольшой опыт программирования на C#, но как подступиться к этой задаче, где начать читать - неясно.

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

Спасибо!

 
 
 
 Re: C# отрыть Firefox, ввести пароль и нажать на ссылку.
Сообщение13.12.2011, 16:59 
Аватара пользователя
Через C# это не сделать, надо писать плагин на JavaScript для этого.
Но через C# можно сделать следующее: вам нужно научиться анализировать трафик http и сгенерировать http запросы, которые посылает ваш браузер при соответствующих действиях.
Самый простой способ сделать это - прочитать поверхностно про суть http, далее использовать System.Net.WebClient. Скорее всего нужно подцеплять cookies для этого.

 
 
 
 Re: C# отрыть Firefox, ввести пароль и нажать на ссылку.
Сообщение13.12.2011, 17:16 
Ну запустить программу можно. Далее можно отправлять сообщения в окно программы и таким образом управлять ею. В крайнем случае можно имитировать глобальные события мыши и клавиатуры. Так поступают некоторые вирусы -- определяют антивирус, имитируют нажатия на нужные кнопки, отвечают на все предупреждения и таким образом выключают антивирус, а уже потом спокойно гадят. :) Хотя плагин или скрипт конечно проще.

Но возможно ваша исходная задача допускает ещё более простое решение. Вот, к примеру, зачем вам нужен сам браузер? Вдруг вы можете самостоятельно выполнить все необходимые действия по доступу к нужному вам ресурсу... Собственно, jrock уже писал об этом...

 
 
 
 Re: C# отрыть Firefox, ввести пароль и нажать на ссылку.
Сообщение13.12.2011, 19:13 
Ещё есть кривой способ. Его не надо использовать. Просто расскажу.
Создаём файл .url с нужной ссылкой (как сказал jrock, поглядев, что там браузер посылает) и открываем его Firefox’ом. Никогда не проверял, но, может быть, даже можно адрес и параметром командной строки передать.

 
 
 
 Re: C# отрыть Firefox, ввести пароль и нажать на ссылку.
Сообщение13.12.2011, 20:27 
Почему кривой? Нормальный способ. Надо конечно заранее посмотреть как устроена форма с паролем чтобы сформировать ссылку. Если это вдруг post-форма, то я не знаю как запрос через командную строку браузеру передать. :)

 
 
 
 Re: C# отрыть Firefox, ввести пароль и нажать на ссылку.
Сообщение13.12.2011, 21:30 
А через командную строку точно работает?

 
 
 
 Re: C# отрыть Firefox, ввести пароль и нажать на ссылку.
Сообщение14.12.2011, 01:26 
Большое все спасибо за ответы!

Действительно, я неточно описал задачу.

Вот то что я делаю обычно вручную: отрываю страницу в браузере, ввожу пороль, на следующей странице нажимаю на ссылку. Эта ссылк отрывает безопасный канал для приложений (что-то навроде VPN), этот канал закрывается самостоятельно каждые 6 часов, мне необходимо его поддерживать открытым. Я и хотел это сделать через C#.

Я почитаю насчет WebClient, но не знаю смогу ли я разобраться с Cookie.

А, что на JavaScript это намного проще?

 
 
 
 Re: C# отрыть Firefox, ввести пароль и нажать на ссылку.
Сообщение14.12.2011, 01:45 
Аватара пользователя
Bridgeport в сообщении #515333 писал(а):
А, что на JavaScript это намного проще?

Проще.

 
 
 
 Re: C# отрыть Firefox, ввести пароль и нажать на ссылку.
Сообщение19.12.2011, 21:43 
Bridgeport в сообщении #515333 писал(а):
Большое все спасибо за ответы!

Действительно, я неточно описал задачу.

Вот то что я делаю обычно вручную: отрываю страницу в браузере, ввожу пороль, на следующей странице нажимаю на ссылку. Эта ссылк отрывает безопасный канал для приложений (что-то навроде VPN), этот канал закрывается самостоятельно каждые 6 часов, мне необходимо его поддерживать открытым. Я и хотел это сделать через C#.

Я почитаю насчет WebClient, но не знаю смогу ли я разобраться с Cookie.

А, что на JavaScript это намного проще?



Я подобные вещи писал на с помощью СUrl, эта библиотека имитирует любой браузер. У меня есть наработки для работы с одни сайтом, если интересует могу скинуть :wink:

-- 19.12.2011, 20:49 --

Нарыл исходник
код: [ скачать ] [ спрятать ]
Используется синтаксис C#
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using SeasideResearch.LibCurlNet;
  10.  
  11. namespace TravianBot
  12. {
  13.     public partial class Main : Form
  14.     {
  15.         private static Easy easy;
  16.  
  17.         private static string text;
  18.  
  19.         public Main()
  20.         {
  21.             InitializeComponent();
  22.  
  23.             text = string.Empty;
  24.  
  25.             Curl.GlobalInit((int)CURLinitFlag.CURL_GLOBAL_ALL);
  26.         }
  27.  
  28.         private void button1_Click(object sender, EventArgs e)
  29.         {
  30.             const string url = "http://s1.travian.com.ua/dorf1.php";
  31.             const string userAgent = "Mozilla/5.0 (Windows NT 6.1; rv:2.0) Gecko/20100101 Firefox/4.0";
  32.  
  33.             string content = "name=%D0%A3%D0%BB%D1%8C%D1%84%D1%81%D0%B0%D1%80%D0%BA&password=d#33575s#110575&s1.x=69&s1.y=5&w=1280%3A1024&login=1302207431";
  34.  
  35.             easy = new Easy();
  36.  
  37.             Easy.WriteFunction wf = OnWriteData;
  38.  
  39.             easy.SetOpt(CURLoption.CURLOPT_URL, url);
  40.             easy.SetOpt(CURLoption.CURLOPT_TIMEOUT, "60");
  41.             easy.SetOpt(CURLoption.CURLOPT_WRITEFUNCTION, wf);
  42.             easy.SetOpt(CURLoption.CURLOPT_USERAGENT, userAgent);
  43.  
  44.             easy.SetOpt(CURLoption.CURLOPT_FOLLOWLOCATION, true);
  45.  
  46.             easy.SetOpt(CURLoption.CURLOPT_POST, true);
  47.             easy.SetOpt(CURLoption.CURLOPT_POSTFIELDS, content);
  48.  
  49.             easy.SetOpt(CURLoption.CURLOPT_SSL_VERIFYHOST, 1);
  50.             easy.SetOpt(CURLoption.CURLOPT_SSL_VERIFYPEER, 0);
  51.  
  52.             easy.Perform();
  53.             easy.Cleanup();
  54.  
  55.             textBox1.Text = text;
  56.  
  57.             string _content = "name=Ульфсарк&password= &s1.x=69&s1.y=5&w=1280%3A1024&login=1302207431";
  58.             byte[] Bytes = Encoding.UTF8.GetBytes(_content);
  59.             string Headers = "Content-Type: application/x-www-form-urlencoded";
  60.             webBrowser1.Navigate("http://s1.travian.com.ua/dorf1.php", "", Bytes, Headers);
  61.         }
  62.  
  63.         public static Int32 OnWriteData(Byte[] buf, Int32 size, Int32 nmemb, Object extraData)
  64.         {
  65.             text += System.Text.Encoding.UTF8.GetString(buf);
  66.            
  67.             return size * nmemb;
  68.         }
  69.     }
  70. }

 
 
 
 Re: C# отрыть Firefox, ввести пароль и нажать на ссылку.
Сообщение19.12.2011, 22:57 
Аватара пользователя
 i 
PleaseTwo в сообщении #517422 писал(а):
Нарыл исходник
При размещении исходных кодов пользуйтесь, пожалуйста, тегом syntax. Добавил.

 
 
 
 Re: C# отрыть Firefox, ввести пароль и нажать на ссылку.
Сообщение18.12.2012, 14:30 
Selenium WebDriver подходит. Мне вот интересно как встроить firefox браузер как COM объект, например, в своё приложение?

 
 
 [ Сообщений: 11 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group