2016-04-04 16 views
3
ben DOM tüm iframe'lerde yoluyla geçmek için çalışıyorum

: geçildiğindeJSON ayrıştırma hatası Google'ın SafeFrame reklamlara geçildiğinde

var frames = driver.FindElements(By.TagName("iframe"));  
foreach (var frame in frames) { 
    driver.SwitchTo().Frame(frame); 
    //Do stuff then switch back to default content 
} 

Bazı Google reklam çerçevelerle bu istisna:

"JSON Parse error: Unterminated string"

Selenium'un çerçeveye geçerken içeriği JSON yerine HTML olarak okumasını bekledim.

ben geçmek için çalışıyorum Google reklam safeframe: adı özniteliği iframe DOM içerdiğinden 60.000 karakter var olduğu

<iframe name="1-0-2;63563;<!doctype html><html><head><style><!--a:link { color: #000000 }a:visited { color: #000000 }a:hover { color: #000000 }a:active { color: #000000 } --></style><script><!--(function(){var b=this;var f=String.prototype.trim?function(a){return a.trim()}:function(a){return a.replace(/^[\s\xa0]+|[\s\xa0]+$/g,&quot;&quot;)},m=function(a,c){return a<c?-1:a>c?1:0};var n;a:{var p=b.navigator;if(p){var q=p.userAgent;if(q){n=q;break a}}n=&quot;&quot;};var r=-1!=n.indexOf(&quot;Opera&quot;)||-1!=n.indexOf(&quot;OPR&quot;),t=-1!=n.indexOf(&quot;Trident&quot;)||-1!=n.indexOf(&quot;MSIE&quot;),u=-1!=n.indexOf(&quot;Edge&quot;),v=-1!=n.indexOf(&quot;Gecko&quot;)&amp;&amp;!(-1!=n.toLowerCase().indexOf(&quot;webkit&quot;)&amp;&amp;-1==n.indexOf(&quot;Edge&quot;))&amp;&amp;! 

iFrame HTML

kısa kesilir.

Selenium'un bu google reklam safeframe'lerine nasıl geçebileceğini bilen var mı?

+1

Bağlantıyı, birlikte çalıştığınız web sayfasıyla paylaşır mısınız? Teşekkürler. – alecxe

+0

Bu, döngü yapan reklamların doğası nedeniyle zordur, ancak http://express.co.uk genellikle her yenilemede bir güvenlik reklamına sahiptir. Üst düzeydeki özellik data-is-safeframe = "true" ile oluşturulmuş olan güvenlik reklamları. Selenyum'dan farklı olarak, FireBug'ın bu saf çerçevelerin ayrıştırılmasında bir sorunu olmadığını belirtmeye değer. – badger110

+0

Teşekkürler, express.co.uk sayfalarında çerçeveden kareye geçiş yapmaya çalıştı ... Sorunla karşılaştı. Sadece karanlıkta bir atış - en son selenyum ve firefox sürümlerini kullanıp kullanmadığınızı kontrol edin. Başka ek bilgiler de yardımcı olabilir. – alecxe

cevap

1

Sorunu http://express.co.uk/ web sitesinde yeniden yapılandırabilirim - zaman zaman DOM'a eklenmiş bir güvenlik çerçevesi var. Anladığım kadarıyla sorun şu ki, bir çerçeve iframe (özniteliği true olarak ayarlanmış) çerçeveyi IWebElement örneğini kullanarak veya veya name kullanarak, bir JSON ayrıştırma hatası ile yanıt verir. Bu, PhantomJS issue tracker numaralı telefondan bildirilmelidir, çünkü belirli bir selenyum dil bağları ile ilgili değil (en son Python/Selenium'u kullandım - aynı hata atıldı).

Geçici Çözümler: frame index çerçeveye geçmek için

  • kullanımı (komple Python kodu bu gist içindedir) benim için çalıştı.

    driver.SwitchTo().Frame(0); 
    
  • anahtarı Firefox veya Chrome için
(ayrıca "başsız" modunda onları çalıştırabilirsiniz): Örneğin, burada C# ilk çerçeveye (sıfır tabanlı dizin) geçebilir nasıl
+0

'un en son sürümünü kullanıyorum Bana Firefox/Chrome'u Windows ortamında başsız olarak çalıştırmak için bir işaretçi verebileceğinizi sanmıyorum? – badger110

+1

@ badger110 Bununla ilgili bir Windows deneyimim yok, ancak sanal ekranları kullanmaya bakın. Linux durumunda, firefox ile kişisel olarak başarılı bir şekilde xvfb' paketini kullandım. – alecxe