2012-07-03 163 views
0

我想能夠啓動多個瀏覽器窗口,並從他們得到的HTML,並與他們互動,就像我可以與.net網頁瀏覽器控制。問題是c#web瀏覽器控件需要STA線程,這使得我的程序變得更慢,更容易出錯。他們是我可以跟真正的IE瀏覽器甚至Chrome,Firefox等對話的方式嗎?控制一個web瀏覽器沒有c#webbrowser控制

我知道有付費的第三方解決方案和東西,但我想知道是否有人知道任何可靠和工作的免費圖書館。我無法使用HttpWebRequest來處理我正在做的事情,所以請不要提出這個建議。

我將在Windows上運行並使用C#。

+1

WebKit.NEt是一個很好的初始點。 –

回答

1

Awesomeium是一個基於Webkit/Chromium(Chrome)的瀏覽器,您可以通過.NET包裝器與WebBrowser控件進行交談。儘管如此,我不確定在STA的線程要求。對於STA線程來說,讓你的應用程序「更慢更容易出錯」 - 這聽起來很奇怪,也許你應該研究解決這個問題。

+0

我會試一試 – kyleb

+0

如何填寫表單域並單擊帶有此控件的提交按鈕?使用.net IE瀏覽器,我可以說element.SetAttribute()和element.InvokeMember('click')。在這個sdk中相當於什麼? – kyleb

+0

我從來沒有嘗試過,但根據文檔,您可以執行任意[Javascript](http://awesomium.com/docs/1_6_4/sharp_api/html/0cb62099-bd17-342a-d988-be8302d611c2.htm)方法,這將允許您與頁面進行交互。你也可以設置Javascript的回調以允許JS通知你異步。我不是100%確定你可以直接在C#中訪問DOM,但你可能必須在JS中這樣做。 – 2012-07-04 07:22:47

1

對於IE(僅)。免費: Microsoft Internet控制

using SHDocVw; 

Microsoft HTML對象庫

using mshtml; 

有了這些,你可以做這樣的事情

foreach (InternetExplorer brIns in _allWindows) 
      { 
       var htmlDoc = brIns.Document as HTMLDocument; 
       if (htmlDoc != null && htmlDoc.all.item(elementName) != null) 
       { 
        var elem = htmlDoc.all.item(elementName) as HTMLInputElement; 
        if (elem != null && attributeName == null) 
        { 
         _ieCurrentDoc = htmlDoc; 
         _currentHtml = htmlDoc.documentElement.outerHTML; 
         return true; 
        } 
        if (elem != null && elem.getAttribute(attributeName) != null) 
        { 
         _ieCurrentDoc = htmlDoc; 
         _currentHtml = htmlDoc.documentElement.outerHTML; 
         return true; 
        } 

       } 
      } 
+0

這是在底下使用相同的ActiveX,並要求看起來STA。 – kyleb

2

我已經使用WebKit.NET。它的免費和偉大的作品(支持Flash,CSS,呈現正確,有一個JavaScript引擎)。它可能會或可能不會廣泛地爲你所做的事情做準備。

http://webkitdotnet.sourceforge.net/

有很多導遊,並演示了一個功能齊全的標籤系統。

編輯:我被愚弄與它周圍,並提出了演示

enter image description here