C#WebBrowser控件--在AJAX之后获取文档元素?

C#WebBrowser控件--在AJAX之后获取文档元素?,c#,javascript,ajax,browser,C#,Javascript,Ajax,Browser,我正在编写一个应用程序,它使用WebBrowser控件查看web内容,这些内容可以通过添加新内容/元素的AJAX进行更改。 我似乎无法以我尝试过的任何方式理解新元素。BrowserCtl.DocumentText没有最新的页面,当然它也不在“查看源代码”中 是否有某种方法可以使用此控件获取此新数据( 请帮忙,谢谢 即: 你控制网页吗 如果是这样,下面是一篇博客文章,解释了如何: 如果没有,可能有解决方案,但我无法帮助您,抱歉。您需要使用DOM。将WebBrowser.Document.DomD

我正在编写一个应用程序,它使用WebBrowser控件查看web内容,这些内容可以通过添加新内容/元素的AJAX进行更改。 我似乎无法以我尝试过的任何方式理解新元素。BrowserCtl.DocumentText没有最新的页面,当然它也不在“查看源代码”中

是否有某种方法可以使用此控件获取此新数据( 请帮忙,谢谢

即:


你控制网页吗

如果是这样,下面是一篇博客文章,解释了如何:


如果没有,可能有解决方案,但我无法帮助您,抱歉。

您需要使用DOM。将WebBrowser.Document.DomDocument转换为IHTMLDocument?。您必须导入一些COM接口或Microsoft.mshtml程序集


查看以了解更多详细信息。

我假设,由于您正在读取从Ajax请求生成的内容,因此您需要用户将应用程序推进到加载相关数据的位置,在该位置运行代码以读取数据

如果不是这样,您将需要自动执行此过程,生成生成生成您感兴趣的DOM节点的单击事件。我通常使用WebBrowser控件执行此操作,并倾向于使用Javascript编写该功能层,然后使用.InvokeScript()调用它。另一种方法是找到从C#启动Ajax功能的节点,并手动触发其单击事件:

HtmlElement content = webMain.Document.GetElementById("content");
content.RaiseEvent("onclick");

在上面的脚本中需要注意的一个重要方面是,如果您接受并克服HtmleElement对象类型的限制,您可以在C#中天真地与DOM节点交互。

运行javascript对元素添加标题并在新窗口中显示它如何

我还没有测试出来,但它可能会工作

(WebBrowser)w.Navigate("javascript:GetElementById('div').innerHtml;", true);
在新窗口中打开返回的true属性。(或框架,或者您可以找到更好的方法)

要捕获NewWindow事件,您需要引用Windows/System32文件夹中的SHDocVw.dll。然后您可以按如下方式强制转换WebBrowser控件:

SHDocVw.WebBrowser_V1 browser = (SHDocVw.WebBrowser_V1)(WebBrowser)w.ActiveXInstance;

您可以在存储响应后立即关闭它。祝您好运,并让我知道它是如何运行的。

信息不在WebBrowser.DocumentText中吗?

我为自己解决了问题

关键是,为通过ajax调用填充的div元素的
onPropertyChanged
事件附加一个处理程序

HtmlElement target = webBrowser.Document.GetElementById("div_populated_by_ajax");

if (target != null)
{
      target.AttachEventHandler("onpropertychange", handler);
}
最后

private void handler(Object sender, EventArgs e)
{
      HtmlElement div = webBrowser.Document.GetElementById("div_populated_by_ajax");
      if (div == null) return;
      String contentLoaded = div.InnerHtml; // get the content loaded via ajax
}

哎哟!如果可能的话,我想避免这种情况。我可以使用HtmlElement.DomElement.COM类型,但是IHTMLDocument会在javascript后使用现在已更改的元素吗?我也在尝试这样做,你找到解决方案了吗?感谢提供信息的帖子,不幸的是,我的问题在于,一旦javascript已经运行,那么e是页面上的新元素,我需要与之交互或检查文档中的值。x似乎没有这些新元素发布javascript:(文档引用提供了对DOM的实时访问,&初始加载后创建的元素与原始元素一样可访问。生成的元素是否存在于框架中?你能分享出现问题的页面吗?很好的解决方案。我只是为了好玩和简单的事情而尝试,这看起来很不错继续呈现旧的html。在.NET4.0hi中尝试过。我一直在尝试使用youtube评论来实现这一点,但我不知道这将如何工作。
HtmlElement target = webBrowser.Document.GetElementById("div_populated_by_ajax");

if (target != null)
{
      target.AttachEventHandler("onpropertychange", handler);
}
private void handler(Object sender, EventArgs e)
{
      HtmlElement div = webBrowser.Document.GetElementById("div_populated_by_ajax");
      if (div == null) return;
      String contentLoaded = div.InnerHtml; // get the content loaded via ajax
}