2 개의 iframe을 비교하고 시각적으로 차이를 얻는 방법?


21

사례 :

나는 2 개의 iframe을 가지고 있으며 둘 다 많은 div와 다른 컨트롤을 가지고 있으므로 두 iframe 모두 HTML 웹 사이트의 중간 크기와 같습니다. 둘 다 비교하고 차이점을 찾고 싶습니다.

나는 여기에 다른 옵션을 생각했다.

해결 방법 1 : 2 iframe의 전체 스크린 샷을 찍고 스크린 샷의 불일치 영역에 그리드를 그리는 Python 베개 라이브러리를 사용하여 두 스크린 샷을 비교하십시오. 그러나 여기서 문제는 인터넷에서 전체 iframe 스크린 샷을 찍을 수있는 코드를 찾지 못했다는 것입니다 ( 스크롤 막대가있는 긴 iframe이 있습니다 ). 나는 거의 모든 답변을 시도했지만 모두 정상적인 페이지에서는 작동하지만 iframe에서는 작동하지 않습니다.

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

해결 방법 2 : iframe에서 HTML 코드를 모두 가져 와서 비교하지만 결과는 2 iframe에서 다르거 나 일치하지 않는 일부 HTML 코드를 찾기 때문에 결과를 분석하기가 쉽지 않습니다. 이것은 텍스트 비교와 비슷하지만 내가 생각하는 좋은 해결책은 아닙니다.

그래서 파이썬 또는 Javascript를 사용하여 iframe의 전체 스크린 샷을 찍을 수있는 코드 또는 2 개의 iframe을 비교하고 차이점을 찾을 수있는 더 나은 옵션을 찾고 있습니다.

Google이 아래에서 찾은 거의 모든 답변을 시도했습니다.

여기에 이미지 설명을 입력하십시오

전체 HTML이 iframe 내에있는 샘플 Iframe이 여기에 제공됩니다 : https://grapesjs.com/demo.html , 일부 코드 가이 iframe의 전체 스크린 샷을 찍을 수 있다면 나에게 비교하기 쉽습니다.


아래의 모든 iframe은 일반 html 페이지입니다. iframe과 같은 것이 무엇인지 구체적으로보고 싶습니까?
Matt Ellen

예, 모두 html 페이지에 있습니다. 내 목표는 두 iframe이 시각적으로 동일하게 보이는 것입니다.
돕는 손

그렇다면 iframe이 최상위 페이지로 표시하는 페이지를 열고 스크린 샷을 찍는 것이 허용됩니까?
매트 엘렌

나는 그렇게 생각하지만 그것이 시도한 모든 스크린 샷 코드가 모든 페이지의 전체 스크린 샷을 찍을 수 있기 때문에 어떻게 가능한지 iframe과 관련하여 스크롤없이 볼 수있는 부분의 스크린 샷만 가져옵니다.
돕는 손

iframe URL이 있으므로 최상위 페이지로 열 수 있습니다.
매트 엘렌

답변:


8

채팅 에서 발견 한 것처럼 토론중인 iframe은 자바 스크립트로 생성되며 URL에서로드되지 않습니다.

이것은 iframe을 잡아 화면을 자동화하는 데 어려움이 있지만 수동 프로세스는 가능합니다.

Firefox에서 iframe을 마우스 오른쪽 버튼으로 클릭하고 팝업 메뉴에서 "이 프레임"을 선택한 다음 "다른 이름으로 프레임 저장 ..."을 선택하십시오.

메뉴 이미지

프레임이 저장되면 배경 URL이 올바른 위치를 가리 키도록 다운로드 한 CSS 중 일부를 연결해야합니다. 이 작업을 수행 한 후 html 파일을 로컬로 열면 현재 일반 웹 페이지에 사용하는 방법을 사용하여 스크린 샷을 찍을 수 있습니다.


6

화면 일부 잡기

수동 또는 자동으로 가져올 수 있습니다. 비교할 iframe이 많지 않은 경우 수동으로 수행하는 것이 옵션이므로 필요한 경우 내용이 포함 된 스크린 샷을 만들고 이미지를 자릅니다. 이 방법의 어려움은 자르는 동안 매우 정밀해야한다는 것입니다.

예를 들어 다음과 같이 DOM의 일부를 캔버스에로드하고 그림을 만드는 등의 작업을 자동으로 수행 할 수 있습니다. HTML5 / Canvas / JavaScript를 사용하여 브라우저 내 스크린 샷 만들기

또한 다음과 같이 https://www.cnet.com/how-to/how-to-take-에 설명 된대로 전체 페이지가 관심있는 항목인지 확인하기 위해 콘텐츠를 임시로 수정할 수 있습니다. 전체 웹 페이지의 크롬에서 스크린 샷

두 이미지 비교

모든 픽셀을 반복하고 비교하여 두 이미지를 비교할 수 있습니다.

두 이미지를 비교하는 알고리즘

결과 표시

프로그램은 두 개의 이미지를 입력으로 가져 와서 출력과 비슷한 크기의 새 이미지를 만들어야합니다. 대상 이미지는 각 차이의 경계에 비교하고 빨간색 선을 그리려면 이미지 중 하나의 픽셀을 표시해야한다고 제안합니다. 이를 위해 차이 영역을 사각형으로 나누어야합니다. 이 방법으로 차이점의 위치와 내용이 무엇인지 확인할 수 있습니다.


답변 주셔서 감사합니다. 파이썬이나 자바 스크립트에서 iframe의 전체 스크린 샷을 찍을 수있는 무언가가 필요하기 때문에 파이썬과 함께 Html2Canvas를 사용할 수있는 기회가 있습니까?
돕는 손

@HelpingHands HTML2Canvas는 Javascript 도구이므로 Javascript를 통해 사용할 수 있습니다 ( html2canvas.hertzen.com 참조 ). HTML2Canvas의 Python 사용법을 검색하면서 Python 프록시를 찾았습니다. 나는 그것을 시도하지 않았지만 도움이되기를 바랍니다. 여기있다 : github.com/brcontainer/html2canvas-python-proxy
라요스 아르 밧

2

pyautogui, mayby ​​pyautogui만으로 베개를 사용할 수 있습니다.

일부 의사 코드 :

스크롤바가 바닥에 닿지 않는 한 :-스크린 샷 찍기-목록에 스크린 샷 이름 저장-아래로 스크롤하여이 루프를 계속하십시오

두 번째 iframe에 대해 위의 루프를 다시 수행하십시오.

생성 한 두 개의 스크린 샷 목록에서 모든 스크린 샷을 비교하십시오.

글쎄, 내가 그렇게 할 것입니다. 그래도 더 좋은 방법이있을 것입니다.


하나의 iframe이 있지만 세로로 길고 도구로 전체 스크린 샷을 찍을 수는 없습니다.
돕는 손

긴 스크린 샷이 필요하지 않습니다. 여러 스크린 샷도 훌륭합니다. 항상 같은 양을 아래로 스크롤하는 한. 기본적으로 iframe에 초점을 맞 춥니 다. 그런 다음 아래쪽 화살표 5 (또는 필요에 따라)를 누르고 스크린 샷을 만듭니다. 스크린 샷에 약간의 이중 컨텐츠가 있는지는 중요하지 않습니다. 다른 iframe에 대해서도 마찬가지입니다.
PythonAmateur742

1

스크린 샷 찍기 위해 html2canvas 사용

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

이렇게하면 이미지를 백엔드로 보낼 수 있습니다.

스레드를 사용 하여 html2canvas를 조정하여 전체 이미지를 가져옵니다.

두 이미지가 모두 있으면 openCV를 사용하여 두 이미지의 차이점을 찾을 수 있습니다. https://www.pyimagesearch.com/2017/06/19/image-difference-with-opencv-and-python/


1

나는 2 개의 iframe을 가지고 있으며 둘 다 많은 div와 다른 컨트롤을 가지고 있으므로 두 iframe 모두 HTML 웹 사이트의 중간 크기와 같습니다. 둘 다 비교하고 차이점을 찾고 싶습니다.

무엇을 비교하고 싶습니까? CSS 규칙 / 속성 차이? 데이터 / 텍스트 차이? 또는 시각적 렌더링?


시각적 렌더링 비교

iframe URL을 추출하고 Selenium 으로 페이지를로드하여 스크린 샷 을 만들 수 있습니다 (예 참조) . 또한 Firefox 확장 Selenium IDE도 있습니다.


답변 주셔서 감사합니다. 실제로 내 iframe에는 URL이나 src가 없습니다. 그리고 스크린 샷을 찍으려면 포트 스크린 샷 만 가져 오지만 iframe의 전체 스크린 샷이 필요합니다.
돕는 손
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.