2014-11-05 6 views
-1

Я вложенной списки, содержащие команды (строки), как Navigate, тип, нажмите и т.д.цепь событий от контроля Webbrowser

Я пытаюсь сделать эти команды/события запустить один за другим. Вот сценарий:

Navigate("http://google.com") 
Type("Something") // The field identificator is passed to the method too 
Click("SomeButton") 

Проблема я столкнулся, если я поставил события в случае DocumentLoaded будет срабатывать только следующий (Type («Что-то»)), не нажимая кнопку. Я не знаю, нужно ли создавать пользовательские события или что-то еще. Я могу легко сделать это для этого сценария, но дело в том, что команды будут разными и для разных сайтов.

Вот код, который, мы надеемся, сделает этот вопрос достаточно ясен:

List<string> commandsList = new List<string>(); 
//[0] => navigate>http://google.com 
//[1] => type>name>q>value 
//[2] => click>name>btnK 

private void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
     { 
      if (e.Url.AbsolutePath != (sender as WebBrowser).Url.AbsolutePath) 
       return; 

      doAction(commandsList[1]); 
      // how to "fire" commandsList[2] ? 
     } 

private void startBtn_Click(object sender, EventArgs e) 
     { 
      doAction(commandsList[0]); // First action is always navigation 
     } 

private void doAction(List<string> commands) 
     { 
      // Do something with the WebBrowser(fill fields, etc.). Depends on the commands list. 
     } 
+0

'но дело в том, что команды будут разными и для разных сайтов.« Как вы уже заметили, нет ни одного решения, которое применимо ко всем случаям. Вот почему люди пытаются использовать API (если есть), вместо того, чтобы пытаться анализировать html-страницы. –

+0

Да, но если мне удастся выполнить команды из списка команд, следовательно, это решит мою проблему. – user1410644

+0

'Я могу легко сделать это для этого сценария', а затем сделать это для этого * сценария *. Но не ожидайте общего пути. (Если бы этот сайт хотел, чтобы вы использовали его программно, он предоставил бы некоторые API, поэтому никакого общего способа взломать) –

ответ

0

То, что вы должны сделать, это перевести их:

Navigate("http://google.com") 
Type("Something") // The field identificator is passed to the method too 
Click("SomeButton") 

Для DOM, связанных с уровнем вещей. Первый просто вызывает обертку http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.navigate(v=vs.110).aspx

Команда типа требует, чтобы вы 1) получили идентификатор элемента и манипулировали значением.

Наконец, событие click просто 1) Получите идентификатор элемента и вызовите метод CLICK.

Но, как говорили другие, есть много вещей, которые нужно знать, например, какие идентификаторы элементов или имена вы хотите?

Смежные вопросы