2 iframe nasıl karşılaştırılır ve görsel olarak fark alınır?


21

Durum :

Ben 2 iframes var ve her iki iframes HTML web sitelerinin orta boyutu gibi her iki div ve diğer kontroller çok var. Her ikisini de karşılaştırmak ve farklılıkları öğrenmek istiyorum.

Burada farklı seçenekler düşündüm:

Çözüm 1: 2 iframın tam ekran görüntüsünü alın ve ızgarayı ekran görüntüsünde uyumsuzluk alanına çizen Python'un yastık kitaplığını kullanarak her iki ekran görüntüsünü karşılaştırın. Ama burada sorun ben internette iframe ekran görüntülerini alabilen herhangi bir kod bulamadım ( kaydırma çubuğuyla uzun bir iframe'im var ). SO'da neredeyse tüm cevapları denedim ama hepsi normal bir sayfa için çalışıyor, ancak iframe için çalışmıyor.

Referans : https://blog.rinatussenov.com/automating-manual-visual-regression-tests-with-python-and-selenium-be66be950196

Çözüm 2: Her iki iframe'den bir şekilde tüm HTML kodlarını alın ve karşılaştırın, ancak sonucu analiz etmek kolay olmayacaktır, çünkü farklı veya bazı 2 iframe'de uyuşmayan bir HTML kodu bulacaktır. Bu daha çok metin karşılaştırma gibi olacak ve inanıyorum iyi bir çözüm değil.

Bu yüzden ben Python veya Javascript kullanarak iframe tam bir ekran görüntüsü alabilir ya da bana 2 iframe karşılaştırmak ve farkları bulmak için izin veren bazı daha iyi bir seçenek alabilir kod arıyor .

Google'ın aşağıda olduğu gibi bulduğu neredeyse tüm cevapları denedim:

resim açıklamasını buraya girin

Örnek iframe burada tüm html'nin iframe içinde olduğu yerde verilir: https://grapesjs.com/demo.html , Bazı kodlar bu iframe'in tam ekran görüntüsünü alabilirse, o zaman benim için karşılaştırmak kolay olacaktır.


Altındaki tüm iframe'ler normal html sayfalarıdır. Özellikle iframe olarak neye benzediklerini görmek ister misiniz?
Matt Ellen

Evet hepsi html sayfası altında. Amacım, iframe'in görsel açıdan aynı göründüğünden emin olmak.
Helping Hands

O zaman iframe'lerin gösterdiği sayfaları üst düzey sayfalar olarak açmak ve bunları ekran görüntüsü almak kabul edilebilir mi?
Matt Ellen

Bence ama bu mümkün, çünkü denediğim tüm ekran kodları herhangi bir sayfanın tam ekran görüntüsünü alabiliyor, ancak iframe söz konusu olduğunda, sadece kaydırma olmadan görülebilen kısmın ekran görüntüsünü alıyor.
Helping Hands

İframe URL'leriniz var, böylece bunları üst düzey sayfalar olarak açabilirsiniz.
Matt Ellen

Yanıtlar:


8

Biz keşfettik gibi bizim sohbet , tartışılmakta olan iframe'lerin javascript oluşturulur ve bir URL'den yüklenmez.

Bu, iframe'i kapmak için ekranın otomatikleştirilmesinde bir zorluk sunar, ancak manuel bir işlem mümkündür:

Firefox'ta iframe'i sağ tıklayın ve açılır menüden "Bu Çerçeve" yi seçin, ardından "Çerçeveyi Farklı Kaydet ..." seçeneğini seçin.

menülerin görüntüsü

Çerçeve kaydedildikten sonra, arka plan URL'lerinin doğru yeri göstermesini sağlamak için indirilen CSS'lerin bir kısmının kullanılması gerekir. Bunu yaptıktan sonra, html dosyasını yerel olarak açın ve normal bir web sayfası için şu anda kullandığınız yöntemi kullanarak bir ekran görüntüsü alabilirsiniz.


6

Ekranın bir kısmını kapma

Elle veya otomatik olarak yakalayabilirsiniz. Karşılaştırılacak fazla iframe yoksa, manuel olarak yapmak bir seçenektir, sadece içeriği içeren bir ekran görüntüsü yaparsınız ve gerekirse görüntüyü kırpırsınız. Bu yaklaşımın zorluğu, kırpma sırasında çok hassas olmanız gerektiğidir.

Bunu otomatik olarak da yapabilirsiniz, örneğin DOM'un bir bölümünü bir tuvale yüklemek ve bunun gibi bir resim yapmak için: Tarayıcı içi ekran görüntüleri almak için HTML5 / Canvas / JavaScript kullanma

Ayrıca, tüm sayfanın ilgilendiğinizden emin olmak için içeriğinizi geçici olarak değiştirebilir ve ardından burada açıklandığı gibi bir ekran görüntüsü yapabilirsiniz: https://www.cnet.com/how-to/how-to-take- a-ekran-of-a-tam web sayfası-içinde-krom /

İki görüntüyü karşılaştırma

Tüm pikselleri döngülerek ve karşılaştırarak iki görüntüyü karşılaştırabilirsiniz.

İki görüntüyü karşılaştırma algoritması

Sonuçları gösterme

Programınız girdi olarak iki resim çekmeli ve çıktı ile benzer boyutta yeni bir resim oluşturmalıdır. Hedef görüntünün, karşılaştırmak ve her farkın sınırında kırmızı bir çizgi çizmek için görüntülerden birinin piksellerini göstermesi gerektiğini öneririm. Bu amaçla, farklılıklar olan bir bölgeyi dikdörtgenlere bölmeniz gerekecektir. Bu şekilde, farklılıkların nerede olduğunu ve farklı içeriklerin ne olduğunu görebilirsiniz.


Cevabınız için teşekkür ederim. Html2Canvas'ı python ile kullanabileceğim bir şans var mı, çünkü iframe'in tam ekran görüntüsünü alabilen python veya javascript'te bir şeye ihtiyacım var.
Helping Hands

@HelpingHands HTML2Canvas bir Javascript aracıdır, bu yüzden Javascript ile kullanabilirsiniz (bakınız: html2canvas.hertzen.com ). HTML2Canvas'ın Python kullanımlarını ararken bir Python proxy'si buldum. Denemedim, ama umarım yardımcı olur. İşte: github.com/brcontainer/html2canvas-python-proxy
Lajos Arpad

2

Tek başına pyautogui, mayby ​​pyautogui ile birlikte yastık kullanabilirsiniz.

Bazı sözde kod:

Kaydırma çubuğu tabana değmediği sürece: - ekran görüntüsü al - ekran görüntüsü adını listeye kaydet - aşağı kaydır, bu döngüye devam et

İkinci iframe için yukarıdaki döngüyü tekrar yapın

oluşturduğunuz iki ekran görüntüsü listesindeki tüm ekran görüntülerini karşılaştırın.

Ben böyle yapardım. Yine de muhtemelen daha iyi yollar var.


Şey sadece bir iframe var ama dikey olarak uzun ve hiçbir araç tam ekran görüntüsü almak mümkün değildir.
Helping Hands

Uzun bir ekran görüntüsüne ihtiyacınız yok. Birkaç ekran görüntüsü de harika olacak. Aynı miktarı her zaman aşağı kaydırdığınız sürece. Temel olarak iframe'inizin odaklanmasına izin veriyorsunuz. Ardından aşağı oka 5 (veya ihtiyacınız olan her ne olursa olsun) kez basın ve ekran görüntüsü alın. Ekran görüntülerinizde biraz çift içerik olması önemli değil. Aynısını diğer iframe için de yaparsınız.
PythonAmateur742

1

Ekran görüntüsü almak için html2canvas kullanma

html2canvas(document.getElementById("img_dots")).then(
  function (canvas2) {
    var img_data2 = canvas2.toDataURL('image/png');
    var im_data2 = img_data2.replace('data:image/png;base64,', '');
    $.ajax({
      type: "POST",
      url: "send_image_to_backend",
      data: {
        "base64data": im_data2,
        // "filename": filename.split(".")[0]
        "filename": new_filename + ".png"
      }, success: function () {
         //send second image and compare
      }
    });
  }
);

Bu, görüntüleri arka uca göndermenizi sağlar.

Görüntünün tamamını getirmek için html2canvas ayarını yapmak için bu iş parçacığını kullanın

Her iki görüntünüze sahip olduktan sonra, 2 görüntü arasındaki farkı bulmak için openCV'yi kullanabilirsiniz - https://www.pyimagesearch.com/2017/06/19/image-difference-with-opencv-and-python/


1

Ben 2 iframes var ve her iki iframes HTML web sitelerinin orta boyutu gibi her iki div ve diğer kontroller çok var. Her ikisini de karşılaştırmak ve farklılıkları öğrenmek istiyorum.

Neyi karşılaştırmak istiyorsun? CSS kuralları / özellik farklılıkları? Veri / metin farklılıkları? Veya görsel render?


Görsel oluşturmayı karşılaştır

Sen iframe URL'sini ayıklamak ve sayfayı yüklemek için Selenyum için (örneğe bakın) ekran görüntüsü almak . Ayrıca selenium IDE firefox uzantınız var .


Cevabınız için teşekkür ederim. Aslında iframe'imin url veya src'si yok. Ve ekran görüntüsünü almak sadece görünüm port ekran görüntüsünü almak ama iframe'in tam ekran görüntüsüne ihtiyacım var.
Helping Hands
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.