【发布时间】:2012-12-06 05:00:21
【问题描述】:
我正在搜索允许我执行以下操作的 .NET 库/组件:
- 加载网页
- 执行链接的JS
- 在页面范围内执行我自己的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();
}
}
谁能提供替代解决方案或帮助解决这个问题?
【问题讨论】: