c# - .NET 浏览器模拟 API

标签 c# .net browser emulation

我正在搜索允许我执行以下操作的 .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();
    }
}

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

最佳答案

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

另一点:您应该通过遍历您的代码来检查结果的类型...这可能有助于找到有效的答案...

关于替代方案,有一些选择:

  • WebKit.Net (免费)

  • Awesomium
    它基于 Chrome/WebKit 并且工作起来很有魅力。 有免费许可证,也有商业许可证,如果需要,您可以购买源代码:-)

  • WatiN (也是免费的)

关于c# - .NET 浏览器模拟 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13942277/

相关文章:

c# - AJAX 返回对象在 asp.net web 表单中包含 d

c# - "Copy Local"和项目引用的最佳实践是什么?

c# - C#可以调用Racket代码吗?

c# - 使用 LINQ 比较两个列表元素

c# - 获取特定异常的名称

javascript - 如何在不锁定浏览器的情况下对服务器执行 "synchronous"javascript调用

c# - 具有相同类型的嵌套 Dto 的 Dto 失败

c# - 强制 .NET 测试方法从内部失败

javascript - 无法启动 'URL' 因为方案没有注册的处理程序

javascript - 确定请求是通过浏览器书签/收藏夹还是链接?