2011-02-04 17 views
6

C# WebBrowser denetimi kullanarak bir web sayfasının formunun SO yanı sıra genel olarak web üzerinde Gönderme ve en değil tüm kodBen bu özel konuyla ilgili mesajların çok gördük

private void btnSubmit_Click(object sender, RoutedEventArgs e) 
{ 
    webBrowser1.Navigate(new Uri("http://samples.msdn.microsoft.com/workshop/samples/author/dhtml/refs/onsubmit.htm")); 
} 

private void btnLogin_Click(object sender, RoutedEventArgs e) 
{ 
    mshtml.HTMLDocument htmlDoc = null; 

    htmlDoc = (mshtml.HTMLDocument) this.webBrowser1.Document; 

    if (webBrowser1.Document != null) 
    { 
     foreach (mshtml.HTMLFormElement form in htmlDoc.forms) 
     { 
      form.submit(); 
      break; 
     } 
    } 
} 
aşağıda görüldüğü gibi eğer

Kodun hiç bir hatası yoktur, ancak gönderemediği yaşam için. Benim kullandığım örnek sayfa basit bir düğme var, ne yapar, radyo düğmesinin seçimini uyarır ve sonra formu gönderir. Formun, WebBrowser denetimi kullanılarak kod aracılığıyla gönderildiği bazı garip nedenlerden dolayı, form gönderilir, ancak uyarı hiçbir zaman gösterilmez.

Burada yanlış yaptığımdan emin değilim. Bu konuda herhangi bir yardım mutluluk duyacağız.

+0

Bunu neden yapmaya çalıştığınızı sorabilir miyim? –

+0

Etkinliği nasıl çektiniz, ne için? –

+1

@Matti, Beni hatırlama seçeneğine sahip olmayan bir iç ağdaki bir giriş prosedürünü otomatikleştirmeye çalışıyorum. – vikramjb

cevap

6

Düğmeye bir tıklama yapmak, yapmanız için gerekenleri yapar mı? Microsoft HTML Nesne Kitaplığı'na (zaten sahip olduğunuz) bir COM başvurusu eklemeniz gerekecektir. Eğer webbrowser kontrolü içine google yüklemek Örneğin, bu kod arama kutusuna "merhaba dünya" yerleştirin ve aramayı gerçekleştirecek:

 mshtml.IHTMLDocument2 doc = ((mshtml.HTMLDocumentClass)webBrowser1.Document); 


     ((mshtml.IHTMLElement)doc.all.item("q")).setAttribute("value", "hello world"); 
     MessageBox.Show("Clicking I'm feeling lucky button"); 
     ((mshtml.HTMLInputElement)doc.all.item("btnI")).click(); 

Düzenleme: bileşenler için kod güncellendi WPF WebTarayıcı kontrol kullanır. Ayrıca, bunun bazen google'dan bir komut dosyası hatası oluşturduğuna dikkat edin, ancak bu, google'un ana sayfada aradığı bazı ajax çağrılarına dayanan bir zamanlama sorunu gibi görünüyor. Aşağıdaki kod ile

form.submit(); 

:

+0

Tüm yöntem, webBrowser1 denetiminde mevcut görünmüyor. Bir şey mi eksik? – vikramjb

+0

.all özelliği, webbrowser sınıfının .Document üyesinin bir üyesidir. .net 2.0'dan beri kullanılabilir: http://msdn.microsoft.com/en-US/library/system.windows.forms.htmldocument.all(v=VS.80).aspx –

+0

WebBrowser denetimini kullanıyorum Bir WPF projesi ve bu yöntemi her yerde görmüyorum. WebBrowser denetiminin belge özelliği, Nesne veri türü gibi görünüyor. – vikramjb

4

Sorununuzu çözmek için çizgiyi değiştirmeniz gerekiyor Bu kullanıcı seçimi hakkında uyarı gösterip formu gönderecektir

var children = form as IEnumerable; 
var inputs = children.OfType<mshtml.HTMLInputElement>(); 
var submitButton = inputs.First(i => i.type == "submit"); 

submitButton.click(); 

.

+0

Gönder düğmesi, formun gönderilmesi için bir JS'yi çağıran bir görüntüdür, bu yüzden form.submit'i yaptım. – vikramjb

+0

Form içindeki bir resmi (gönderme düğmesindeki ile yaptığım gibi) bulabilir ve ardından bu öğeyi tıklatabilirsiniz. Bahsettiğiniz betiğin sadece form göndermekten başka bir şey yapması durumunda size yardımcı olacaktır. –

+0

Oleg cevabınız da doğruydu, çünkü john'un örneğini denedim. – vikramjb

1

Ben forma ötesinde bir JavaScript sürü ve düğmesini kullanarak bir site ile etkileşim halindeyken benim için çalışıyormuş formu

_webBrowser.InvokeScript("eval", new object[] { "document.getElementById('formName').submit()" }); 

göndermek için bir JavaScript enjekte ederek çalışarak daha kirli bir astar var .

+0

Gerçekten kirli bir tek satır, ama bu sayfada benim için çalışan tek cevap. – colton7909

İlgili konular