【问题标题】:.NET Browser emulation API.NET 浏览器模拟 API
【发布时间】:2012-12-06 05:00:21
【问题描述】:

我正在搜索允许我执行以下操作的 .NET 库/组件:

  1. 加载网页
  2. 执行链接的JS
  3. 在页面范围内执行我自己的JS并返回执行结果,可以是复杂对象,也可以是对象数组。

到目前为止,我发现的唯一解决方案是使用 WebBrowser 对象,但它需要大量样板代码才能使一切正常工作,并且无法处理对象数组。 在以下代码示例中,我在 dynamic val = o.a; 上收到 RuntimeBinderException

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();
    }
}

谁能提供替代解决方案或帮助解决这个问题?

【问题讨论】:

    标签: c# .net browser emulation


    【解决方案1】:

    您可以尝试dynamic a = o[0].a;dynamic a = result[0].a; 看看是否有帮助...

    另一点:您应该通过单步执行代码来检查result 的类型...这可能有助于找到有效的答案...

    关于替代品,有一些选择:

    • WebKit.Net(免费)

    • Awesomium
      它基于 Chrome/WebKit,就像一个魅力。 有可用的免费许可证,但也有商业许可证,如果需要,您可以购买源代码 :-)

    • WatiN(也是免费的)

    【讨论】:

      猜你喜欢
      • 2011-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多