C#WebBrowser控件-在AJAX之后获取文档元素?我正在编写一个应用程序,它使用WebBrowser控件来查看可以通过AJAX添加新内容/元素来更改的Web内容。我似乎无法以任何方式尝试新元素。BrowserCtl.DocumentText没有最新的页面,当然也不在ViewSource中。有没有办法使用此控件获取此新数据?:(请帮忙。谢谢!IE:Browser.Navigate("www.somewebpagewithAJAX.com");//等待浏览器完成的代码......//WebBrowser控件已加载内容,AJAX已加载新内容//(在运行时在表单上可见)但在Browser.Document.All//或Browser.DocumentText中看不到它们:(我为我解决了这个问题。重点是,对于通过ajax填充的div元素调用onPropertyChanged事件附加一个处理程序。HtmlElementtarget=webBrowser.Document.GetElementById("div_populated_by_ajax");如果(目标!=null){target.AttachEventHandler(“onpropertychange”,处理程序);}最后,privatevoidhandler(Objectsender,EventArgse){HtmlElementdiv=webBrowser.Document.GetElementById("div_populated_by_ajax");如果(div==null)返回;StringcontentLoaded=div.InnerHtml;//获取通过ajax加载的内容}usingSystem;使用System.Windows.Forms;namespaceWebBrowserDemo{classProgram{publicconststringTestUrl="http://www.w3schools.com/Ajax/tryit_view.asp?filename=tryajax_first";[STAThread]staticvoidMain(string[]args){WebBrowserwb=newWebBrowser();wb.DocumentCompleted+=newWebBrowserDocumentCompletedEventHandler(wb_DocumentCompleted);wb.Navigate(TestUrl);while(wb.ReadyState!=WebBrowserReadyState.Complete){Application.DoEvents();}Console.WriteLine("nPressanykeytocontinue...");控制台.ReadKey(true);}静态无效wb_DocumentCompleted(objectsender,WebBrowserDocumentCompletedEventArgse){WebBrowserwb=(WebBrowser)sender;HtmlElement文档=wb.Document.GetElementsByTagName("html")[0];HtmlElement按钮=wb.Document.GetElementsByTagName("按钮")[0];Console.WriteLine(document.OuterHtml+"n");button.InvokeMember("点击");Console.WriteLine(document.OuterHtml);您需要使用DOM将WebBrowser.Document.DomDocument转换为IHTMLDocument吗?.您必须导入一些COM接口或Microsoft.mshtml程序集。有关详细信息,请访问http://msdn.microsoft.com/en-us/library/aa752641(VS.85).aspx。我假设您正在读取从Ajax请求生成的内容,您需要用户将应用程序升级到加载相关数据的位置,此时您运行代码来读取数据。如果没有,您将需要自动执行此过程,生成点击事件,构建您有兴趣阅读的DOM节点。我通常使用WebBrowser控件执行此操作,并且倾向于用Javascript编写该层功能并使用.InvokeScript()调用它。另一种方法是从C#中找到触发Ajaxfunction的节点并手动触发它们的点击事件:HtmlElementcontent=webMain.Document.GetElementById("content");content.RaiseEvent("onclick");上述脚本中的注意事项一个重要方面是,如果您接受并解决HtmlElement对象类型的限制,则可以在C#中天真地与DOM节点交互。如何运行javascript为元素添加标题并将其显示在新窗口中?我还没有测试过,但它可能会工作。(WebBrowser)w.Navigate("javascript:GetElementById('div').innerHtml;",true);在新窗口中打开返回的true属性。(或者框架,或者你可以找到更好的方法)要捕获NewWindow事件,你需要引用Windows/System32文件夹中的SHDocVw.dll。然后您可以像这样转换WebBrowser控件:SHDocVw.WebBrowser_V1browser=(SHDocVw.WebBrowser_V1)(WebBrowser)w.ActiveXInstance;存储响应后,您可以立即将其关闭。祝你好运,让我知道进展如何。WebBrowser.DocumentText中的信息不是吗?http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.documenttext.aspx你控制网页吗?如果是这样,这里有一篇解释如何操作的博客文章:http://www.palladiumconsulting.com/blog/sebastian/2007/04/ultimate-intranet-toy.html如果不是,可能有解决方案,但我无能为力你,对不起。以上是C#学习教程:C#WebBrowser控件-AJAX后获取文档元素?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
