2012-12-18 109 views
3

我正在尋找.NET庫/組件,它可以讓我做以下操作:.NET瀏覽器仿真API

  1. 加載網頁
  2. 執行被鏈接JS
  3. 執行我自己的JS在頁面的範圍,返回執行結果,可能是複雜對象或對象數組。

到目前爲止,我發現的唯一解決方案是使用WebBrowser對象,但它需要大量的樣板代碼才能使所有工作都成功,並且無法使用對象數組。 在下面的代碼示例中,我收到dynamic val = o.a;

class Program 
{ 
    [STAThread] 
    static void Main(string[] args) 
    { 
     var t = new System.Threading.Thread(BrowserThread); 
     t.SetApartmentState(System.Threading.ApartmentState.STA); 
     t.Start(); 

     Console.ReadLine(); 
    } 

    private static void BrowserThread() 
    { 
     var wb = new WebBrowser(); 
     wb.Navigate("http://google.com"); 
     wb.DocumentCompleted += (sender, args) => 
      { 
       var head = wb.Document.GetElementsByTagName("head")[0]; 
       var script = wb.Document.CreateElement("script"); 
       dynamic el = script.DomElement; 
       el.text = "function test(){return [{a:2},{a:2},{a:2}]}"; 
       head.AppendChild(script); 
       dynamic result = wb.Document.InvokeScript("test"); 
       dynamic o = result.pop(); 
       dynamic val = o.a; 
      }; 
     Application.Run(); 
    } 
} 

一個RuntimeBinderException任何人都可以提供一個替代解決方案,或幫助解決這個問題嗎?

回答

2

你可以嘗試dynamic a = o[0].a;dynamic a = result[0].a;,看看有沒有什麼幫助...

還有一點:你應該加緊雖然你的代碼檢查result類型...這可能幫助找到工作的答案...

關於替代品也有一些選項:

  • WebKit.Net(免費)

  • Awesomium
    它基於Chrome/WebKit並且像魅力一樣工作。 有一個免費許可證也是一個商業之一,如果需要的話,你可以買到的源代碼:-)

  • WatiN(也是免費的)