如何在C#或Windows窗体中通过JavaScript动态生成网页HTML?

如何在C#或Windows窗体中通过JavaScript动态生成网页HTML?,javascript,c#,html,winforms,web-scraping,Javascript,C#,Html,Winforms,Web Scraping,我能够使用以下代码获得HTML源代码。但是当我试着 页面URL正在动态更改,在下一个生成的页面上,当我看到源代码视图时,在HTML正文中仅获得以下代码: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>IdP Selection</title> <meta charset="utf-8" /> <meta n

我能够使用以下代码获得HTML源代码。但是当我试着

页面URL正在动态更改,在下一个生成的页面上,当我看到源代码视图时,在HTML正文中仅获得以下代码:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>IdP Selection</title>
  <meta charset="utf-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="stylesheet" type="text/css" href="style.min.css">
</head>
<body>
  <div id="app-container" class="app-container"></div>
  <script>
      AppContext = {
          idps: '[{&quot;entityId&quot;:&quot;MI-PROD-SAML2-IDP-MEDALLIA&quot;,&quot;name&quot;:&quot;Marriott International (any associate w/ EID)&quot;},{&quot;entityId&quot;:&quot;https://identity.starwoodhotels.com&quot;,&quot;name&quot;:&quot;Starwood Hotels&quot;}]'
      };
  </script>
  <script src="main.min.js"></script>
</body>
</html>

我想这是因为阿贾克斯!在ajax之后,元素的上一个处理程序不会更新,您应该在OnPropertyChanged事件上附加处理程序:

var element = webBrowser.Document.GetElementsByTagName("HTML")[0];
element != null ? element.AttachEventHandler("onpropertychange", handler) : return;
private string renderedHtml;

private void handler(Object sender, EventArgs e)
{
      var element = webBrowser.Document.GetElementsByTagName("HTML")[0];
      if (element != null)
          renderedHtml = element.OuterHtml; 
}

因此,页面是由ReactJS呈现的,因此您将很难让它正常工作。我能想到的最好的事情就是创建一个“等待”在WebBrowserControl中创建元素的东西

!(function() { 
    function check(){
        if(!document.getElementById("MI-PROD-SAML2-IDP-MEDALLIA")) {
            setTimeout(check, 100);
        } else {
            window.external.CallServerSideCode();
        }
    }
    check();
}());
然后可以缩小到你可以使用的东西上

webBrowser1.Navigate(@"javascript:!(function(){function c(){if(!document.getElementById('MI-PROD-SAML2-IDP-MEDALLIA')){setTimeout(c, 100);}else{window.external.CallServerSideCode();}}c();}());");

代码运行时是否出现特定异常?代码运行正常,但我无法在运行时获取生成的元素,var marelement=doc.GetElementById(“MI-PROD-SAML2-IDP-MEDALLIA”);此处正在获取空值:(我应该如何初始化/实例化第二行中的目标?return仍然给出错误(无效表达式术语return)我使用if(element!=null){element.AttachEventHandler(“onpropertychange”,handler);}更改表达式@拉维安,你做得对。我只是在编辑器上快速地写下它们,没有检查。它现在可以工作了吗?是的,项目运行良好。但处理程序并没有被解雇(
webBrowser1.Navigate(@"javascript:!(function(){function c(){if(!document.getElementById('MI-PROD-SAML2-IDP-MEDALLIA')){setTimeout(c, 100);}else{window.external.CallServerSideCode();}}c();}());");