2016-03-19 14 views
1

pcpao.org/general.php?strap=152814186280001650CefSharpとフレームは、唯一の両方のみ」が表示、そのサイト、.GetSourceAsyncと.ViewSourceから完全なHTMLを取得しようとして最初のフレーム

からHTMLを取得しますフレームセット 'HTML。 ShowDevToolsオプションを使用すると、完全なHTMLデータは要素コレクションとChrome-devtoolsのソースの両方にあります。

私はウェブページがロードされた後にこれを実行していますが、dev-toolsのそれ以来ずっとそこにいるはずですか?

ナビゲートされたサイトから完全なHTMLを取得するには、何が欠けていますか。私はこれがフレームと関係があると思っていますが、1時間のグーグル・グーグルで古いメッセージを読むと、これは接線的にしか言及されていません。

Winformsの

package id="cef.redist.x64" version="3.2526.1362" targetFramework="net46" 
    package id="cef.redist.x86" version="3.2526.1362" targetFramework="net46" 
    package id="CefSharp.Common" version="47.0.3" targetFramework="net46" 
    package id="CefSharp.WinForms" version="47.0.3" targetFramework="net46" 
+0

「フルHTMLソース」のための用語は、デベロッパーツールはちょうどあなたのためにいくつかのことを簡素化するが、彼らはこのように動作しませんでした、ありません。各フレームにはHTML文書が含まれています。したがって、各フレームからソースを取得する必要があります。どのようにCefSharp APIに問い合わせてください。 – fddima

+0

http://stackoverflow.com/questions/35890355/get-html-source-code-from-cefsharp-web-browserの複製のように見える – amaitland

答えて

1

おかげで、以前のバージョンからのいくつかの例では、これがどのように動作するか私は混乱していました。私はこのようなものを探していた。

 var frameIdent = Browser.GetBrowser().GetFrameIdentifiers(); 
     var result = Browser.GetBrowser().GetFrame(frameIdent.Last()).GetSourceAsync().Result; 
     textBox1.Text = result.ToString(); 

だから私はGetSourceAsyncを経由して、各フレームから結果を取得し、文字列にそれらをすべて連結し、サイトからのすべてのHTMLを取得する方法は、フレーム識別子のリストをループであると思います。

+0

投稿したリンクごとに、ページの読み込みが完了するまで待っていましたか?メインフレームのソースを取得しますか? – amaitland

3

私は、メインフレームではなく、フレームにあるアイテムをクリックしようとすると同じ問題が発生していました。あなたはあなたのような何かを行うことができ、このメソッドが含まれているモジュールのフォーム上で「使用」している場合は

 public static IFrame GetFrame(this ChromiumWebBrowser browser, string FrameName) 
    { 
     IFrame frame = null; 

     var identifiers = browser.GetBrowser().GetFrameIdentifiers(); 

     foreach (var i in identifiers) 
     { 
      frame = browser.GetBrowser().GetFrame(i); 
      if (frame.Name == FrameName) 
       return frame; 
     } 

     return null; 
    } 

:あなたの答えに例を使用して、私は次の拡張メソッドを書いた

var frame = browser.GetFrame("nameofframe"); 
     if (frame != null) 
      frame.EvaluateScriptAsync("document.getElementById('whateveridyouwanttoclick').click();"); 

もちろん、これを使う前にページの読み込みが完了していることを確認する必要がありますが、私はそれをたくさん使う予定です。それが役に立てば幸い!

ジム

関連する問題