์ด ๊ธ์ ์ ๊ฐ ์ต๊ทผ์ ์์ํ ํ
์คํธ ํ๋ก์ ํธ์ playwright๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด์ ๋ธ๋ผ์ฐ์ ํ
์คํ
๊ณผ puppeteer, playwright, selenium ์ ๋ํ์ฌ ์ ์ด๋ณด์์ต๋๋ค.
์๋ชป๋ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ค๋ฉด ๊ผญ ์๋ ค์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
๋ธ๋ผ์ฐ์ ํ ์คํ ์๋ํ์ ํ์์ฑ
์น ๊ฐ๋ฐ์ ํ๋ ๋ฐ ์์ด์ ํญ์ ๋น ์ง์ง ์๊ณ ์๊ฐํด์ผ ํ ๋ถ๋ถ ์ค ํ๋๊ฐ cross-browser compatibility ์ผ ๊ฒ์ ๋๋ค. Chrome, Safari, Firefox, Edge ๋ฑ์ ๋ธ๋ผ์ฐ์ ๋ค์ด ๊ฐ์ ๋ฐฉ์์ผ๋ก ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ์ถ๋ ฅํ์ฌ ๋ํ๋ด๋ฉด ์ด์์ ์ด๊ฒ ์ง๋ง, ๋ธ๋ผ์ฐ์ ๋ง๋ค ๊ณ ์ ์ ๋ ๋๋ง ์์ง์ด ์๊ณ ๋ํ ๋ ๋๋ง ์์ง/ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ HTML์ ๋ค๋ฃจ๋ ์คํ์ผ ๋ํ ๋ค๋ฆ ๋๋ค. ๊ทธ๋์ ๊ฐ์ ์์ค๋ผ๋ ๋ธ๋ผ์ฐ์ ๋ง๋ค ๋ค๋ฅด๊ฒ ๊ทธ๋ ค์ง๊ณ ์ด์๊ฐ ๋ฐ์ํ๊ธฐ๋ ํฉ๋๋ค(cross browsing issue). ์ด๋ฐ ์ด์๋ ์ฌ์ฉ์ ๊ฒฝํ์ ์ง์ ๋ฎ์ถ๋ ์ํฅ์ ์ฃผ๊ธฐ ๋๋ฌธ์ E2E ํ ์คํธ์ ์ค์ํ ๋ถ๋ถ์ ๋๋ค. ๋ํ CI/CD ํ์ดํ๋ผ์ธ์ ๋ธ๋ผ์ฐ์ ํ ์คํธ๋ฅผ ์ถ๊ฐํจ์ผ๋ก์จ ์ฝ๋๊ฐ ํ๋ก๋์ ์ผ๋ก ๋ฐฐ์ก๋๊ธฐ ์ ์ ์ค๋ฅ๋ ์คํจํ ํ ์คํธ๋ฅผ ํฌ์ฐฉ ํ ์ ์์ต๋๋ค.
๊ทธ๋ผ ๋ธ๋ผ์ฐ์ ๋ง๋ค ์ด๋ค ๋ ๋๋ง ์์ง๋ค์ด ์์๊น์?
๋ธ๋ผ์ฐ์ | ๋๋๋ง ์์ง | ์์ ๊ถ |
---|---|---|
Edge | EdgeHTML, Blink(2019) | EdgeHTML : Microsoft, Blink: Google |
Chrome | Webkit, Blink( 2013, 4, ๋ฒ์ 28 ์ดํ) | Blink : Google |
Safari | Webkit | Apple |
FireFox | Gecko | Mozilla |
Opera | Webkit | Apple |
๋ธ๋ผ์ฐ์ ์๋ํ์ ๊ฐ์ ์ ๋งค๋ด์ผ๋ก ์ํ๋ ํ
์คํ
์คํ ๋ฆฌ๋ฅผ ๊ทธ๋๋ก ์๋ํ๋ก ์คํํ ์ ์๋ค๋ ์ ์
๋๋ค.
๋งค๋ด์ผ ํ
์คํ
์์์ ํฌํจ๋ ์ผ๋ค์ ๋ณด๋ฉด, ๊ฐ ํธ๋์ญ์
์ ๋ถ๋ฌ์ค๊ณ ๊ฐ ์๋๋ฆฌ์คํ
์คํธ์ ์ฑ๊ณต ์ฌ๋ถ๋ฅผ ๋ฆฌํฌํธ ํ๋ฉฐ, ํผ์ด ์๋ค๋ฉด ํผ์ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์คํฌ๋ฆฐ์ท์ผ๋ก ์ฐ์ต๋๋ค. ์ด๋ฐ ๋ธ๋ผ์ฐ์ ํ
์คํ
์ ์ค์ ์ฌ์ฉ์ํ๊ฒฝ๊ณผ ๋์ผํ ์กฐ๊ฑด์ ๋ง์ถ์ด ์ฌ๋ฌ ๋ธ๋ผ์ฐ์ ์์๋ ํ
์คํ
์ ์คํํ๊ฒ ๋์์ฃผ๋ ๊ฒ์ด headles browser๋ฅผ ์ด์ฉํ๋ ๊ฒ์
๋๋ค.
Headless Browser
ํค๋๋ฆฌ์ค ๋ธ๋ผ์ฐ์ ๋ GUI(๊ทธ๋ํฝ ์ฌ์ฉ์ ์ธํฐํ์ด์ค)๋ฅผ ์ง์ํ์ง ์๋ ์น๋ธ๋ผ์ฐ์ ์ ๋๋ค. ์ฌ์ฉ์ ์ธํฐํ์ด์ค๊ฐ ์์ง๋ง ์์ ํ ์น๋ธ๋ผ์ฐ์ ์ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ์คํฌ๋ฆฝํธ๋ ๋ค๋ฅธ ์ํํธ์จ์ด๋ฅผ ํตํด์๋ง ์๋ํ ์ ์๋ ๋ธ๋ผ์ฐ์ ๋ฅผ ๋งํฉ๋๋ค. ๋ค์ ๋งํด์ ํ๋ฉด์์ UI ๋ฐ ๋ค์ํ ํฝ์ ์ ๋ ๋๋ง์ ์ฒ๋ฆฌํ๋ ๊ทธ๋ฆฌ๋ ์์ ์ ๊ฑด๋๋ฐ๊ณ (์ฌ์ฉ์ ์ธํฐํ์ด์ค ์์ด) ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋์ผํ ํ ์คํธ๋ฅผ ์คํํฉ๋๋ค.
ํค๋๋ฆฌ์ค ๋ธ๋ผ์ฐ์ ๋ GUI๊ฐ ์์ฑ๋์ง ์์ ๋ฉ๋ชจ๋ฆฌ, ์๊ฐ ๋ฐ ๋ฆฌ์์ค๊ฐ ๋ ์๋ชจ๋๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ ๋ธ๋ผ์ฐ์ ๋ณด๋ค ๋น ๋ฆ ๋๋ค. ๋ํ ํค๋๋ฆฌ์ค ๋ธ๋ผ์ฐ์ ๋ ์ผ๋ถ Linux ๋ฐฐํฌํ ๋ฐ ์๋ฒ์ ๊ฒฝ์ฐ์ ๊ฐ์ด ๋ช ๋ น์ค์ ํตํด์๋ง ์ก์ธ์คํ ์ ์๋ ์์คํ ๋ฐ ํ๋ซํผ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋์ ์น ํ ์คํธ์ ์น ์คํฌ๋ํ์ ์ฉ๋๋ก ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค.
์ข ๋ฅ
- Headless Chrome - Google, Chrome์ง์, 59๋ฒ์ ๋ถํฐ released
- Headless Firefox - Mozilla, Firefox์ง์
- PanthomJS - released 2011, deprecated since March 2018, ๊ด๋ฆฌ์๊ฐ ์ค๋จ ์ ์ธ ์์นด์ด๋ธ๋จ.
- HtmlUnit Driver-์๋ฐ๋ฅผ ์ง์ํ๋ headless ๋ธ๋ผ์ฐ์
- Erik -webkit ์ง์
- triflejs
์์์ ์ ์ํ ํค๋๋ฆฌ์ค ๋ธ๋ผ์ฐ์ ๋ฅผ ๊ตฌ๋/์ ์ด ํ๊ธฐ์ํด์ cli ๋๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์ฐ์ฌ์ง ํ ์คํธ ์คํฌ๋ฆฝํธ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ํค๋๋ฆฌ์ค ํฌ๋กฌ์ ์ด์ฉํ์ฌ ์นํ์ด์ง์์ pdfํ์ผ๋ก ์ ์ฅํ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ค์ด๋ณด๊ฒ ์ต๋๋ค. (Mac and Linux ( Chrome 59๋ถํฐ ) Windows( Chrome 60 ๋ถํฐ)์ ํ๊ฒฝ๋ถํฐ ๊ฐ๋ฅ) ์ฐธ๊ณ ์๋ฃ : headlessChrome ์ค์น ๋ฐ ์ฌ์ฉ์ ๋ํ ์์ธํ ์ค๋ช ์ ๋๋ค
- cli๋ก ์ง์ ์ ์ผ๋ก headless browser๋ก ์ ๊ทผํ ์ ์์ต๋๋ค.
chrome \
--headless \ # Runs Chrome in headless mode.
--disable-gpu \ # Temporarily needed if running on Windows.
--remote-debugging-port=9222 \
https://www.chromestatus.com # URL to open. Defaults to about:blank.
alias chrome="/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome"
alias chrome-canary="/Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary"
alias chromium="/Applications/Chromium.app/Contents/MacOS/Chromium"
ํ์ฌ ํ์ด์ง์ ๋ํ PDFํ์ผ์ ๋ง๋๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด,
chrome --headless --disable-gpu --print-to-pdf https://www.chromestatus.com/
ํ์ผ์ ํ์ฌ ๋๋ ํ ๋ฆฌ์ ์ ์ฅ๋ฉ๋๋ค.
- ๋๋ Puppeteer(Node js library)๋ผ๋ ํด์ ์ฌ์ฉํ๊ฒ ๋๋ค๋ฉด JavaScript ์ธ์ด๋ฅผ ์ด์ฉํ์ฌ ํ๋ก๊ทธ๋๋ฐ ์ ๊ทผ๋ฐฉ์๋ ๊ฐ๋ฅํฉ๋๋ค. Puppeteer๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์นํ,
const puppeteer = require('puppeteer')
;(async () => {
const browser = await puppeteer.launch()
const page = await browser.newPage()
await page.goto('https://www.chromestatus.com', { waitUntil: 'networkidle2' })
await page.pdf({ path: 'page.pdf', format: 'A4' })
await browser.close()
})()
- ํค๋๋ฆฌ์ค ํฌ๋กฌ ๋ธ๋ผ์ฐ์ ๋ ๋ํ Selenium์ด๋ผ๋ ํด์ ํตํด์๋ ๊ฐ๋ฅํฉ๋๋ค. Selenium ์ ๊ฒฝ์ฐ WebDriver ๋ฅผ ํตํด์ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ ์ด ํ ์ ์์ต๋๋ค. Selenium WebDriver๋ ๋ค์ํ ๋ธ๋ผ์ฐ์ ๋ฅผ ์๋ํ ํ ์คํธ ํ ์ ์๋๋ก ๋์์ฃผ๋ ํ ์คํธ ํ๋ ์์ํฌ ์ ๋๋ค.๋ ์์ธํ ์ค๋ช ์ ์ด ๋ถ ์ค๋ช ์ด ์ข์๊ฒ ๊ฐ์ต๋๋ค. WebDriver๋ WebDriver JSON Wire Protoco๋ผ๋ ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ฌ ๋ธ๋ผ์ฐ์ (Chrome/Firefox/Safari/IE)์ ํต์ ํ๊ฑฐ๋ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๊ฒ ๋ฉ๋๋ค. ๊ฐ ๋ธ๋ผ์ฐ์ ์๋ ์์ฉํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ๊ฐ๊ฐ์ ๋๋ผ์ด๋ฒ ๋ค์ด ์์ต๋๋ค. headless chrome์ ๊ฒฝ์ฐ chrome Driver ๊ฐ ํ์ํฉ๋๋ค. chrome Driver๋ Chromium() ๊ณผ์ ํต์ ์ ์ํ WebDriver์ ์ ์ ํ๋กํ ์ฝ์ ๊ตฌํํ๋ ๋ ๋ฆฝ๋ ์คํ๊ฐ๋ฅํ ์๋ฒ์ ๋๋ค. ์ฐธ๊ณ ์๋ฃ : stackoverflow: How does chromedriver.exe work on a core and fundamental level
selenium ์์ headlessChrome ์ค์น ๋ฐ ์ฌ์ฉ์ ๋ํ ์์ธํ ์ค๋ช ์ ๋๋ค
ํค๋๋ฆฌ์ค ๋ธ๋ผ์ฐ์ ๋ค์ ์ฌ์ฉํ ์ ์๋ API๋ฅผ ์ ๊ณตํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ๋ช๊ฐ์ง ์ถ๋ ธ์ต๋๋ค.
- Selenium
- Playwright
- Puppeteer
- Cypress
- CasperJS
๋ ๋ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฆฌ์คํธ๋ ์ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ์๋ฉด ๋ฉ๋๋ค.
Selenium
released date: 2004๋
์ง์์ธ์ด : Python
, Java
, C-Sharp
, JavaScript
, Ruby
, PHP
, Perl
.
์ง์ ๋ธ๋ผ์ฐ์ : Chromium/Chrome, Firefox, Edge, Safari,Opera, Internet Explorer
Selenium์ 2004๋
๋ถํฐ ๋ฆด๋ฆฌ์ฆ ๋์์ผ๋ฉฐ, ์ง์์ธ์ด ๋ฐ ์ง์ ๋์ ๋ธ๋ผ์ฐ์ ์ธก๋ฉด์์ ๊ฐ์ฅ ํฌ๊ด์ ์ผ๋ก ์ ๊ณตํฉ๋๋ค. ๊ทธ๋์ ๊ฐ์ฅ ๋๋ฆฌ ์๋ ค์ ธ ์์ผ๋ฉฐ ๋ง์ด ์ฐ์ด๊ธฐ๋ ํฉ๋๋ค.
์์ ์ธ๊ธํ์๋ฏ์ด ๋ค๋ฅธ ๋ธ๋ผ์ฐ์ ์ ํ๊ฒฝ์์ ํ
์คํ
ํ๋ ค๋ฉด, ๋๋ผ์ด๋ฒ๋ฅผ ์ค์นํด์ผํฉ๋๋ค. ์๋ฅผ ๋ค์ด, Chrome์ ๊ฒฝ์ฐ ChromeDriver, Safari๋ Safaridriver , Firefox๋ Geckodriver ๊ฐ ์์ต๋๋ค. ์ด WebDriver ์ ๋ํด ์์์ผ ํ ํ ๊ฐ์ง๋ ๋ธ๋ผ์ฐ์ ๋๋ผ์ด๋ฒ๋ฅผ ์ค์นํ์ฌ ํ๋ค๋ ๊ฒ์
๋๋ค. ๋ค์์ ์ค๋ช
ํ puppeteer๋ playwright ๋ณด๋จ ๋ณต์ก์ฑ์ด ์กฐ๊ธ ์ถ๊ฐ๋๋ ์ผ์ด์ง๋ง ํ๋ก์ ํธ์ ์๊ตฌ์ฌํญ์ ๋ฐ๋ผ ๋ค์ํ ๋ธ๋ผ์ฐ์ ์ ๋ค์ํ ๋ฒ์ ์ ์ง์ ํ์ฌ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๋ธ๋ผ์ฐ์ ๊ฐ ํ
์คํธ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
Selenium์ ํค๋๋ฆฌ์ค ๋ธ๋ผ์ฐ์ ์๋ํ๋ ์ง์ํฉ๋๋ค. SeleniumWebDriver3 ์ด์ ๋ฒ์ ์์๋ HTMLUnitDriver๋ฅผ ์ด์ฉํ์ฌ ํค๋๋ฆฌ์ค ๋ธ๋ผ์ฐ์ ๋ฅผ ์ด์ฉํ์๊ณ , SeleniumWebDriver3 ์ดํ ๋ถํฐ๋ ์ค์ ๋ธ๋ผ์ฐ์ ์ ํค๋๋ฆฌ์ค ๋ฒ์ ๋ ์ง์ํฉ๋๋ค. GUI๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์๋ ํ
์คํธ ์คํ ํ๋ฉด์ ๋ณผ ์ ์์ต๋๋ค.
Puppeteer
Released date : Jan, 2018
์ง์ ์ธ์ด: JavaScript
์ง์ ๋ธ๋ผ์ฐ์ : chrome, firefox
์ด๋ฆ์์ ์ ์ถ ํ ์ ์๋ฏ์ด, ์นํ์ด์ง์์ ์ผ๋ถ ์์ ์ ์ํํ๊ธฐ ์ํด ์กฐ์ํ๋ ๊ผญ๋๊ฐ์์ ๋๋ค. Puppeteer๋ Selenium์ ์ผ๋ถ ๋จ์ ์ ๋ํ Google์ ๋์์ผ๋ก์จ Chrome DevToolsํ์ ์์ด๋์ด๋ก ์งํ๋ ํ๋ก์ ํธ ์ ๋๋ค.
Browser๋ฅผ ์ ์ดํ๋ ๋ฐฉ์์ด ์ ๋ ๋๊ณผ๋ ๋ค๋ฅธ webdriver๋ฅผ ์ฌ์ฉํ์ง ์๊ณ DevToolsํ๋กํ ์ฝ์ ํตํด Chrome ๋๋ Chromium์ ์ ์ดํฉ๋๋ค.
DevToolsํ๋กํ ์ฝ์ ๋๋ฒ๊ทธ, ์ธ์คํํธ, profile chromiun, Chrome ๊ธฐ๋ฅ์ ๊ฐ๋ฅํ๊ฒ ํด์ค๋๋ค. ์๋ก ํฌ๋กฌ์ DevTools๊ฐ ์ด ํ๋กํ ์ฝ์ ์ด์ฉํฉ๋๋ค.
์ฌ๊ธฐ์ ์ ๋ ๋๊ณผ ๋ฐํ๋ ์ฅ์ ์ผ๋ก๋ Puppeteer๋ฅผ ์ค์นํ ๋, Chromium์ด ๋ฒ๋ค๋ก ์ ๊ณต๋ฉ๋๋ค. ์ฆ, ์ ๋ ๋์์์ ํธํ๋๋ browser driver๋ฅผ ์ค์น/์ ๊ทธ๋ ์ด๋ ํด์ค์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ ์ฌ๊ธฐ์ ์๋ํธํ๋๋ ๋ธ๋ผ์ฐ์ ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐ ํด์ค๋๋ค. ์ ๋ ๋์์ ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํฌ๋กฌ๋๋ผ์ด๋ฒ๋ฅผ ์๋์ผ๋ก ์ค์นํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํ ์ ์์ง๋ง, ์ด๋ฐ ๊ณผ์ ๋ํ Puppeteer์์ ๋ถํ์ํ ๊ณผ์ ์ด๋ฏ๋ก, Puppeteer๊ฐ ํ๋ก์ ํธ๋ฅผ ์์ํ๊ธฐ์ ๋ ์ฌ์ด ์ด์ ์ด ์์ต๋๋ค. ํ์ง๋ง ์ง์๋๋ ๋ธ๋ผ์ฐ์ ๋ Chrome์ ๊ตญํ ๋ฉ๋๋ค. ์ต๊ทผ firefox๋ฅผ ์ง์ํ๊ธด ํ์ง๋ง, is Puppeteer Firefox ready yet?์ ์ฐธ๊ณ ํ๋๊ฒ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. ๋ค์ํ ๋ธ๋ผ์ฐ์ ์์ ํ ์คํ ์ ์งํํ๊ธฐ๊ฐ ์ด๋ ต์ต๋๋ค. ๊ทธ๋์์ธ์ง Puppeteer๋ ํ ์คํธ๋ฅผ ์ํ ํด๋ณด๋ค๋ automation ํด์ ๋ ๊ฐ๊น๋ค๋ ๊ธ, ์ ๋ณด๋ค์ ๋ณผ ์ ์์ต๋๋ค. ์ฆ, ์คํฌ๋ํ์ด๋ pdf๋ฅผ ๋ง๋ค์ด๋ด๋ ์ผ๋ค์ ๋น ๋ฅธ ์ผ์ฒ๋ฆฌ๋ฅผ ํฉ๋๋ค.
์ด๋ฏธ์ง ๋ฐ์ท : yogendra.me
Playwright
released date: 31 January 2020
์ง์ ์ธ์ด: JavaScript
, TypeScript
, Java
, Python
, C#
์ง์ ๋ธ๋ผ์ฐ์ : Chrome, Friefox, Safari
Playwright ๊ณผ Puppeteer์ ์ด๋ฆ๋ ๋น์ทํ ๋ฟ๋๋ฌ ๊นํ ์ปจํธ๋ฆฌ๋ทฐํฐ๋ฅผ ๋ณด๋ฉด ์ค๋ณต๋๋ ์ฌ๋๋ค์ด ๋ณด์ ๋๋ค. ๊ทธ๋์์ธ์ง ์ ๊ณต๋๋ API๊ฐ ๊ฑฐ์ ๋น์ทํฉ๋๋ค. ๊ตฌ๊ธ์ ์ํด์์๋ pupeteerํ์ด ๋ง์ดํฌ๋ก์ํํธ์ฌ๋ก ์ด์งํ์ต๋๋ค.TestTalks๋ฅผ ๋ค๋ฃจ๋ Test Guild์ ๋ง์ดํฌ๋ก์ํํธ์ฌ์ Playwright JS team ํ๋ก๊ทธ๋จ ๋งค๋์ ์ธ Arjun Attam์์ ์ธํฐ๋ทฐ์์ Playwright๋ Puppeteer์๋ ๋ค๋ฅธ ์ฒ ํ์ ๊ฐ์ง๊ณ ์๋ค๊ณ ๋งํธ์ต๋๋ค. ๊ทธ์ ๋ง์ ๋ฐ๋ฅด๋ฉด์ด ํด์ E2E(End to End) ํ ์คํธ์ ํ ์คํธ๋ฅผ ํ๋ ๋๋ฒจ๋กํผ ๋ค์ ์ํด ๋ง๋ค์ด์ก์ต๋๋ค. Playwright ํ์ ์ข ๋จ ๊ฐ ํ ์คํธ์์ ์ฌ๋ฌ ๋ธ๋ผ์ฐ์ ์ ํ ์คํ ์ง์์ ๋ํ ๊ฐญ์ ๋ฐ๊ฒฌํ์๊ณ , Chrome, Safari, Firefox๋ฅผ ์ง์ํ๊ฒ ํ์์ต๋๋ค(Puppeteer์ ํ๊ณ๋ฅผ ๊ฐ์ ). ๋ค์ํ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ง์ํด์ฃผ๋ ์ฅ์ ์ด ์์ง๋ง selenium์ ๋นํด์ ๋ธ๋ผ์ฐ์ ์ ๋ค์ํ ๋ฒ์ ์ ์ง์ํ์ง ๋ชปํฉ๋๋ค.
Playwright๊ฐ puppteer ๋ณด๋ค ํ ์คํธ๋ฅผ ์ํด ์ง์๋ ๋๊ตฌ๋ ์ ์ ์ ์ ์๋ ๊ฒ์ ํ ์คํธ ๋ฌ๋๋ฅผ ์ง์ํ๋ ์ ๊ณผ codeless ํ ์คํธ ์๋ํ์ ๋๋ค. ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ค ๋ณด๋ฉด ๋ฐ๋ณต์ ์ธ ์ผ๋ค์ ํ๊ฒ ๋๋๋ฐ, ์ฝ๋ ์์ด ํ ์คํธ ์๋๋ฆฌ์ค์ ๋ง์ถฐ ๋ธ๋ผ์ฐ์ ์์ ์ํํ๋ ๊ฒ์ ๋ ์ฝ๋ฉ ํ๋ฉด ๊ทธ๊ฒ์ด ์ฝ๋๋ก ๋ณํ๋ฉ๋๋ค. ์ ๋ ์์์ผ๋ก๋ง ๋ด์ ์ผ๋ง๋งํผ ์ ํํ๊ฒ ์ฝ๋๋ก ๋ณํํ ์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง ์ ๋ง ์ ๋๋ค๋ฉด ์์ฐ์ฑ์ ๊ฐ์ํ ํ๋๋ฐ ํ๋ชซํ ๊ฒ ๊ฐ์ต๋๋ค. ๋ํ API๋ฅผ ์ง๊ด์ ๋ง๋ค์ด ๋ฎ์ ๋ฌ๋์ปค๋ธ์๋ ์ ๊ทผํ ์ ์๋๋ก ํ์์ต๋๋ค. Playwright๋ selenium์ ์ปค๋ฎค๋ํฐ๋ณด๋จ ์์ง๋ง, ๋ฒ๊ทธ๋ ์ฌ์ฉ์๋ค์ ์ด์ฉ ํธ์์ฑ์ ์ํด slack ์ฑ๋์์ ๋งค์ฐ ํ๋์ ์ผ๋ก ํ๋ํ๊ณ ์์ต๋๋ค.(๋ฌผ์ด๋ณด๋ฉด ๋ต๋ณ์ด ๊ธ๋ฐฉ ์ต๋๋ค!) playwright์ selenium์ ์ปค๋ฎค๋ํฐ๋ณด๋จ ์์ง๋ง, ๋ฒ๊ทธ๋ ์ฌ์ฉ์๋ค์ ์ด์ฉ ํธ์์ฑ์ ์ํด slack ์ฑ๋์์ ๋งค์ฐ ํ๋์ ์ผ๋ก ํ๋ํ๊ณ ์์ต๋๋ค.(๋ฌผ์ด๋ณด๋ฉด ๋ต๋ณ์ด ๊ธ๋ฐฉ ์ต๋๋ค!)
๋ค์ ๊ธ์์ playwright์ ํน์ง๊ณผ ์ฃผ์ ๊ธฐ๋ฅ๋ค์ ๋ํด์ ์ด์ผ๊ธฐ ํ๊ฒ ์ต๋๋ค.
์ฐธ๊ณ ์๋ฃ