2011-07-20 54 views
6

不觸發onclick事件我使用DOTNET Web瀏覽器點擊輸入的元素 - 按鈕。當這個點擊事件被觸發時,它會執行一個JS函數,它使用Google Recaptcher生成驗證碼,其源代碼看起來像Recaptcha link。 現在的問題是,我無法觸發onClick事件,我使用下面的代碼:輸入標籤InvokeMember(「點擊」)在Web瀏覽器中

HtmlElementCollection inputColl = HTMLDoc.GetElementsByTagName("input"); 
     foreach (HtmlElement inputTag in inputColl) 
     { 
      string valueAttribute = inputTag.GetAttribute("value"); 
      if (valueAttribute.ToLower() == "sign up") 
      { 
       inputTag.Focus(); 
       inputTag.InvokeMember("Click"); 
       break; 
      } 
     } 

我已經檢查過了,我抓住右邊的按鈕,但不知道爲什麼onClick事件沒有被解僱。 歡迎任何建議。

+0

您的代碼爲我工作。在瀏覽器控制文檔完全準備好之前,是否有可能運行此代碼。 –

+0

不,文檔完全加載,我能夠得到我想要的元素,我已經調試和檢查,我能夠抓住它。但是當我點擊按鈕時什麼也沒有發生,我猜它的點擊事件沒有被觸發,而當我在Web瀏覽器上手動執行時,它會被點擊。 –

+0

你把代碼放在哪裏?確保在文檔被完全加載後調用它。並且請注意,Web瀏覽器控件的OnDocumentCompleted通常會調用兩次,因此請檢查Webbrowser的狀態以確保其實際完成。 – longbkit

回答

3
  1. 添加參考Microsoft.mshtml;
  2. 看看下面的固定例如:

    HtmlElementCollection inputColl = HTMLDoc.GetElementsByTagName("input"); 
        foreach (HtmlElement inputTag in inputColl) 
        { 
         string valueAttribute = inputTag.GetAttribute("value"); 
         if (valueAttribute.ToLower() == "sign up") 
         { 
          inputTag.Focus(); 
          IHTMLElement nativeElement = el.DomElement as IHTMLElement; 
          nativeElement.click(); 
          break; 
         } 
        } 
    
0

確定 「點擊」 是正確的名字嗎?我有一些幾乎完全相同的代碼,完全相同的事情,屬性名稱是「onclick」。再看看頁面的HTML。

  foreach (HtmlElement element in col) 
      { 
       if (element.GetAttribute(attribute).Equals(attName)) 
       { 
        // Invoke the "Click" member of the button 
        element.InvokeMember("onclick"); 
       } 
      } 
1

這應該可以肯定。我在包含onclick事件的Anchors和DIvs上測試了它。

HtmlElementCollection inputColl = HTMLDoc.GetElementsByTagName("input");  
foreach (HtmlElement inputTag in inputColl)  
{   
    string valueAttribute = inputTag.GetAttribute("value");   
    if (valueAttribute.ToLower() == "sign up")   
    { 
     obj = inputTag.DomElement;        
     mi = obj.GetType().GetMethod("click");        
     mi.Invoke(obj, new object[0]);   
    }  
} 

我一直無法打開鏈接查看代碼,因此我沒有專門針對您的案例進行嘗試。 無論如何,如果這不起作用,可以在標記容器插入表格,在這種情況下,你必須解僱提交表單的情況下,不觸發對SORM點擊提交按鈕。

不管怎樣,可能你的代碼將正常工作,以及如果你所說的「單擊」爲小寫(我真的沒有驗證,只是猜測,螺母在C#中的情況下的事!)。

PS:見Webbrowser: sequencing activites when no DocumentCompleted is fired by a link on hosted webpage對於你的情況下一些有趣端代碼,希望它可以幫助和可能有人通過回報幫助我!

+0

「click」不在方法列表中。它返回null爲mi。 – Lali

-1

正如你已經擁有焦點的對象,嘗試發送ENTER關鍵是這樣的:

SendKeys.Send("{ENTER}") 
0

嘗試

if (inputTag.InnerHtml == "sign up" || inputTag.InnerText.Contains("sign up")) 
{ 
    inputTag.InvokeMember("click"); 
} 

的條件剛玩,請檢查您是否得到正確的按鈕。順便說一句,小案例「點擊」InvokeMember。這是我使用的,它適用於我。