2017-03-24 7 views
0

URLからコンテンツを取得するソフトウェアを作成しています。それに取り組んでいるとき、私はJavaスクリプトが完成した後、HTMLコンテンツを正確に取得できないという問題にぶつかります。 HTMLをJavaスクリプトでレンダリングするWebサイトがありますが、jsを実行しないブラウザはサポートしていないものがあります。JavaScriptをOpen Webkit Sharpで終了した後の最終的なHTMLコンテンツを取得する

WebBrowser.DocumentSystem.Windows.Controls.WebBrowserを使用してみましたが、LoadCompletedでは運がありませんでした。

その後、私はOpenWebkitSharpライブラリを試しました。 UIでは、Webサイトのコンテンツが正しく表示されますが、コードDocumentDocumentCompletedにある場合でも、java-scriptによって表示されないコンテンツが返されます。 contentHtmlは、Javaスクリプトが終了した後にレンダリングされていない値を持つ

... 
using WebKit; 
using WebKit.Interop; 

public MainWindow() 
{ 
    windowFormHost = new System.Windows.Forms.Integration.WindowsFormsHost(); 
    webBrowser = new WebKit.WebKitBrowser(); 
    webBrowser.AllowDownloads = false; 
    windowFormHost.Child = webBrowser; 
    grdBrowserHost.Children.Add(windowFormHost); 
    webBrowser.Load += WebBrowser_Load; 
} 

private void WebBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
{ 
    var contentHtml = ((WebKitBrowser)sender).DocumentAsHTMLDocument; 
} 

: はここに私のコードです。

答えて

0

この問題を解決するには、Javaスクリプトの終了後に完全なHtmlコンテンツを取得するために私のコードにいくつかのトリックを追加しました。

using WebKit; 
using WebKit.Interop; 
using WebKit.JSCore; //We need add refrence JSCore which following with Webkit package. 

public MainWindow() 
{ 
    InitializeComponent(); 
    InitBrowser(); 
} 

private void InitBrowser() 
{ 
    windowFormHost = new System.Windows.Forms.Integration.WindowsFormsHost(); 
    webBrowser = new WebKit.WebKitBrowser(); 
    webBrowser.AllowDownloads = false; 
    windowFormHost.Child = webBrowser; 
    grdBrowserHost.Children.Add(windowFormHost); 
    webBrowser.Load += WebBrowser_Load; 
} 

private void WebBrowser_Load(object sender, EventArgs e) 
{ 
    //The ResourceIntercepter will throws exception if webBrowser have not finished loading its components 
    //We can not use DocumentCompleted to load the Htmlcontent. Because that event will be fired before Java-script is finised 
    webBrowser.ResourceIntercepter.ResourceFinishedLoadingEvent += new ResourceFinishedLoadingHandler(ResourceIntercepter_ResourceFinishedLoadingEvent); 
} 

private void ResourceIntercepter_ResourceFinishedLoadingEvent(object sender, WebKitResourcesEventArgs e) 
{ 
    //The WebBrowser.Document still show the html without java-script. 
    //The trict is call Javascript (I used Jquery) to get the content of HTML 
    JSValue documentContent = null; 
    var readyState = webBrowser.GetScriptManager.EvaluateScript("document.readyState"); 

    if (readyState != null && readyState.ToString().Equals("complete")) 
      { 
       documentContent = webBrowser.GetScriptManager.EvaluateScript("$('html').html();"); 
       var contentHtml = documentContent.ToString(); 
      } 

} 

は、この1つはあなたを助けることができる願っています。

関連する問題