2016-02-11 3 views
0

Недавно я начал новый проект, и он работал корректно с помощью Visual Studio 2015 «webBrowser». К сожалению, браузер по умолчанию не поддерживает некоторые веб-элементы, которые мне нужны для его запуска. Поэтому я решил искать альтернативу браузера, которая могла бы запускать эти элементы.Как запустить GeckoFx «GetElementById» funtion в C#?

После выполнения некоторых исследований я решил пойти с GeckoFx, главным образом потому, что я читал, что его командные функции работают очень похоже на оригинальный webBrowser (такие команды, как GetElementById).

Я пытаюсь создать программу, которая автоматически вводит меня в систему «login.live.com». Я не уверен, почему, но когда он запускает код, ввод пароля «пароль» работает, но письма нет. Пожалуйста, помогите мне понять, почему!

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace XLP_2_11_16__2_ 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     //This is not the actual folder location. Part of it was suppstituded by "..." for safety reasons. 
      Gecko.Xpcom.Initialize(@"C:\...\bin\Debug\xulrunner"); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      geckoWebBrowser1.Navigate("https://login.live.com"); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
     //Actual email and password was substituted for safety reasons. 
      string email = "[email protected]"; 
      string pass = "mypassword"; 

      geckoWebBrowser1.Document.GetElementById("i0116").SetAttribute("value", email); 
      geckoWebBrowser1.Document.GetElementById("i0118").SetAttribute("value", pass); 
      geckoWebBrowser1.Navigate("javascript:void(document.forms[0].submit())"); 
     } 

     private void geckoWebBrowser1_Click(object sender, EventArgs e) 
     { 

     } 

     private void geckoWebBrowser1_DocumentCompleted(object sender, Gecko.Events.GeckoDocumentCompletedEventArgs e) 
     { 

     } 

     public void Delayed(int delay, Action action) 
     { 
      Timer timer = new Timer(); 
      timer.Interval = delay; 
      timer.Tick += (s, e) => { 
       action(); 
       timer.Stop(); 
      }; 
      timer.Start(); 
     } 
    } 
} 

Это форма конструкции:

http://i.imgur.com/O211Mgu.png?1

Если кто-нибудь знает лучшего способа сделать это, пожалуйста, дайте мне знать ПОЖАЛУЙСТА ПОМОГИТЕ !!

ответ

2

Я смог воспроизвести поведение, которое вы наблюдали. Я считаю, что это потому, что тип поля ввода - это «электронная почта», которая запускает проверку. Я смог заполнить поле, используя тип GeckoInputElement из модуля Gecko.DOM.

Следующий код работает для меня:

var emailField = new Gecko.DOM.GeckoInputElement(geckoWebBrowser1.Document.GetHtmlElementById("i0116").DomObject); 
emailField.Value = @"[email protected]"; 

var passwordField = new Gecko.DOM.GeckoInputElement(geckoWebBrowser1.Document.GetHtmlElementById("i0118").DomObject); 
passwordField.Value = @"test_password";