2016-03-19 52 views
1

pcpao.org/general.php?strap=152814186280001650CefSharp ve çerçeveler, sadece her iki yalnızca 'göstermek, o site, .GetSourceAsync ve .ViewSource tam HTML almaya çalışırken ilk çerçeveye

HTML alınırken çerçeve kümesi 'HTML. ShowDevTools seçeneğini kullanarak, tam HTML verileri, hem öğe koleksiyonunda hem de Chrome devoidlerinin kaynaklarıdır.

Web sayfası yüklendikten sonra bunu çalıştırıyorum, ancak dev araçlarda olduğu için hala orada olmalı mı?

Tam HTML'yi gezinen bir siteden çıkarmak için neler kaçırıyorum. Bunun çerçevelerle ilgisi olduğundan şüpheleniyorum ama bir saatlik googling ve eski mesajları okuduktan sonra bunu sadece teğetsel olarak anladım.

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

. Her çerçeve html belgesini içerir. Bu yüzden her bir çerçeveden kaynak almalısınız. Nasıl yapılacağını öğrenmek için CefSharp API'ye danışın. – fddima

+0

Bir http://stackoverflow.com/questions/35890355/get-html-source-code-from-cefsharp-web-browser – amaitland

cevap

1

Teşekkür

Win, önceki sürümlerden bazı örnekler bu işlerin nasıl yürüdüğünü karıştı vardı. Böyle bir şey arıyordum.

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

Bu yüzden bir siteden tüm HTML almak için bir yol sanırım çerçeveleri tanımlayıcılar listesinde döngü olduğunu GetSourceAsync aracılığıyla her çerçeveden sonuç almak ve bir dizeye hepsini bağlamak.

+0

kopyası gibi görünüyor. Gönderdiğim bağlantıya göre, sayfanın yüklenmesini beklediniz mi? ve ana çerçeve için kaynağı aldınız mı? – amaitland

3

Ana çerçevede değil, çerçevede bulunan öğeyi tıklatmaya çalışırken aynı sorunu yaşıyordum. Cevabınız örnek kullanıldığında, aşağıdaki uzatma yöntemi yazdı:

 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; 
    } 

bir gibi bir şey yapabilirsiniz bu yöntemi içeren modül için formunuzda "kullanarak" varsa:

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

Tabii ki, bunu kullanmadan önce sayfa yükünün tamamlandığından emin olmalısınız, ancak bunu çok kullanmayı planlıyorum. Umarım yardımcı olur!

Jim 'tam HTML kaynağı' için terim devtools sadece sizin için bazı şeyleri basitleştirmek, ancak bu şekilde işe yaramadı vardır