我正在搜索允许我执行以下操作的 .NET 库/组件:
- 加载网页
- 执行链接的JS
- 在页面范围内执行自己的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();
}
}
谁能提供替代解决方案或帮助解决这个问题?
最佳答案
您可以尝试 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/