簡體   English   中英

如何通過C#或Windows格式的網頁JavaScript獲取動態生成的HTML?

[英]How to get dynamically generated HTML by JavaScript of web page in C# or Windows forms?

我可以使用以下代碼獲取HTML源代碼。 但是當我嘗試使用https://marriott.medallia.com/sso/marriott/homepage.do?v=bnAaQvo3*lVHsqtnwluPh_CMCsIHyFkti&alreftoken=6d0d31c7eb7583b964d0ecb89b55e12b

頁面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>

當我檢查生成的單選按鈕時,我能夠在瀏覽器開發人員元素選項卡中獲取HTML元素。

在此處輸入圖片說明

我的C#代碼如下:

public Form1()
    {
        InitializeComponent();
        this.webBrowser1.ObjectForScripting = new MyScript();
    }
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        webBrowser1.Navigate("javascript: window.external.CallServerSideCode();");
    }
[ComVisible(true)]
    public class MyScript
    {
        public void CallServerSideCode()
        {
            var doc = ((Form1)Application.OpenForms[0]).webBrowser1.Document;
            var renderedHtml = doc.GetElementsByTagName("HTML")[0].OuterHtml;
            var marelement = doc.GetElementById("MI-PROD-SAML2-IDP-MEDALLIA");
            HtmlElementCollection eCollections = doc.GetElementsByTagName("HTML");
            string strDoc = eCollections[0].OuterHtml;

        }
    }

我認為是因為ajax! 在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();}());");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM