Puppeteer를 사용하여 웹 페이지의 이미지 차이를 만듭니다.
라이브러리 설치
헤드리스 Chrome (Chromium)을 제어하는 라이브러리 Puppeteer을 사용합니다.
yarn 또는 npm을 사용하여 Puppeteer 및 기타 필요한 라이브러리를 설치합니다.
$ mkdir my-project
$ cd my-project
$ yarn init # or npm init
$ yarn add puppeteer looks-same # or npm install puppeteer looks-same
looks-same 은 두 이미지를 비교하여 동일한 이미지인지 여부를 결정하거나 차이 이미지를 생성할 수 있는 라이브러리입니다.
여기에서는 프로그램을 작성하기 전에 생성할 이미지를 저장하는 디렉토리를 작성합니다.
$ mkdir dist
Puppeteer를 제어하는 JavaScript 만들기
Puppetter API를 사용하여 브라우저를 제어하는 프로그램을 만듭니다. 여기서는
URL_A
와 URL_B
라는 변수 이름으로 비교할 두 개의 웹 페이지를 지정합니다.작성하는 프로그램에서는 다음의 조작을 실시합니다.
URL_A
로 전환 URL_A
의 스크린 샷 만들기 URL_B
로 전환 URL_B
의 스크린 샷 만들기 // index.js
const puppeteer = require('puppeteer')
const looksSame = require('looks-same')
const URL_A = 'https://example.com/a'
const URL_B = 'https://example.com/b'
;(async () => {
const browser = await puppeteer.launch()
const page = await browser.newPage()
await page.setViewport({ width: 512, height: 100 })
const pathA = 'dist/a.png'
const pathB = 'dist/b.png'
const pathDiff = 'dist/diff.png'
await page.goto(URL_A)
await page.screenshot({ path: pathA })
await page.goto(URL_B)
await page.screenshot({ path: pathB })
await new Promise((resolve, reject) =>
looksSame.createDiff(
{
reference: pathA,
current: pathB,
diff: pathDiff,
highlightColor: '#ff00ff'
},
error => (error ? reject() : resolve())
)
)
await browser.close()
})()
프로그램을 실행합니다.
$ node index.js
프로그램을 실행하면
dist
디렉토리 안에 스크린샷과 그 차이가 생성되고 있는 것을 알 수 있습니다. 또한 이미지의 다른 부분은 분홍색(#ff00ff)으로 강조 표시됩니다.실제 예
다음과 같이 미묘하게 내용이 다른 두 개의 웹 페이지 스크린샷의 차이 이미지를 실제로 만들어 봅니다.
<!-- a.html -->
<!DOCTYPE html>
<html>
<body>
<h1 class="title">Helloo!</h1>
<p class="content">This is page A!</p>
</body>
</html>
<!-- b.html -->
<!DOCTYPE html>
<html>
<body>
<h1 class="title">Hello!</h1>
<p class="content">This is page B!</p>
</body>
</html>
텍스트의 차이는 이런 느낌.
$ diff a.html b.html
1c1
< <!-- a.html -->
---
> <!-- b.html -->
5,6c5,6
< <h1 class="title">Helloo!</h1>
< <p class="content">This is page A!</p>
---
> <h1 class="title">Hello!</h1>
> <p class="content">This is page B!</p>
앞의 프로그램에 하드 코드된 URL을 적절하게 변경합니다.
별도의 웹 서버를 시작하는 등 위의 HTML에 아래의 URL로 액세스할 수 있도록 해 주세요.
// index.js
// ...
const URL_A = 'http://127.0.0.1:8080/a.html'
const URL_B = 'http://127.0.0.1:8080/b.html'
// ...
프로그램을 실행합니다.
node index.js
다음과 같이 이미지가 생성됩니다.
a.png
b.png
차이 이미지
요약
Node.js를 사용하여 두 웹 페이지의 스크린 샷의 차이 이미지를 만들고 콘텐츠의 차이와 스타일의 차이 등을 감지 할 수 있습니다. Production 과 개발 환경 사이에 어떤 외형의 변화가 발생하고 있는지를 가시화하거나, CI 등으로 돌려 채팅 툴에 차분 화상을 포스트하는 등도 간단하게 할 수 있을 것 같네요.
Reference
이 문제에 관하여(Puppeteer를 사용하여 웹 페이지의 이미지 차이를 만듭니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/KamataRyo/items/943aeb4378b3863242f1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)