2017-04-24 79 views
1

我正在構建控制檯應用程序,在該應用程序中,我獲取頁面的html並使用HtmlAgilityPack解析它。在修改此頁面上的某些表單值之後,我想通過單擊同一頁面上的提交按鈕來提交它。我能夠使用它的ID屬性獲取按鈕,但無法以編程方式點擊它。 那麼我應該怎麼做呢?基本上我想在填寫完細節後提交表單,以便通過我的控制檯應用程序來實現這一點。單擊控制檯應用程序中的html按鈕

+0

看來你的問題在這裏:http://stackoverflow.com/questions/43571355/make-a-button -click-itself/43571424#43571424 –

+0

@PhucTaiLe:我不這麼認爲。 (如果你想說你的鏈接應該回答OP的問題) – Clijsters

+0

對不起,我的意思是鏈接回答你的問題:) –

回答

0

您無法從控制檯應用程序發佈HTML文檔。 獲取文檔意味着您解析了HTML文本,但是您沒有與正在運行頁面的Web服務器鏈接,這將聽取您的回傳。

您的唯一方法是在您的控制檯應用程序上運行WebBrowser,導航到您的頁面,一旦您的導航發生,檢索文檔文本,解析它,然後通過webbrowser調用Click方法你的按鈕。

這裏是一個小例子:

class Program 
{ 
    private static WebBrowser wb1 = new WebBrowser(); 

    [STAThread] 
    static void Main(string[] args) 
    { 
     runBrowserThread(new Uri("http://www.google.it")); 
    } 

    private static void runBrowserThread(Uri url) 
    { 
     var th = new Thread(() => { 
      var br = new WebBrowser(); 
      br.DocumentCompleted += Br_DocumentCompleted; ; 
      br.Navigate(url); 
      Application.Run(); 
     }); 
     th.SetApartmentState(ApartmentState.STA); 
     th.Start(); 
    } 

    private static void Br_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
    { 
     //Retrieve string content of document 
     var document = ((WebBrowser)sender).Document; 
     var documentAsIHtmlDocument3 = (mshtml.IHTMLDocument3)document.DomDocument; 
     var content = documentAsIHtmlDocument3.documentElement.innerHTML; 

     //Parse content with html agility pack or whatever 

     //Click on button 
     wb1.Document.GetElementById("myId").InvokeMember("click"); 

     Application.ExitThread(); 
    } 
} 

考慮我沒有測試,但應該是一個起點。另外,如果你有一個複雜的頁面,你可能不想依靠InternetExplorer(默認的WebBrowser)來加載你的頁面,但可以考慮在GeckoFX上使用Firefox,在這種情況下,你必須以一種方式編寫HTML檢索部分不同於IE瀏覽器。

請記住,包括System.Windows.Forms的和Microsoft.mshtml如果你想嘗試這個樣品出來

+0

我試過了,它會拋出以下異常: - 在System.Windows.Forms.dll中發生未處理的異常'System.Threading.ThreadStateException' 附加信息:ActiveX控件'8856f961-340a-11d0-a96b- 00c04fd705a2'不能被實例化,因爲當前線程不在單線程單元中。 @Emanuele Ghetti –

+0

哦,當然,STA的舊的甜蜜的問題 - 無論什麼... 我更新了工作(和測試,這次是P)的答案代碼 您可以在這個答案中找到更多的信息http:/ /stackoverflow.com/a/4271581/7581948 @vidit mathur –

+0

很明顯,您不知道如何從控制檯應用程序發佈HTML文檔,但這並不能證明這是不可能的。可以在IE窗口中使用Internet Explorer導航到頁面,而不是Web瀏覽器窗口。 – user34660

相關問題