Autify Playwright Snippets

Prev Next

๋•Œ๋•Œ๋กœ Autify Nexus์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์ž๋™ํ™”ํ•  ๋•Œ, ํ‘œ์ค€ ๋…ธ์ฝ”๋“œ ์Šคํ…๋งŒ์œผ๋กœ๋Š” ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†๋Š” ๋ฌธ์ œ์— ์ง๋ฉดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์‹œ:

  • ํŠน์ • ์ขŒํ‘œ์—์„œ ํด๋ฆญ์ด ํ•„์š”ํ•œ ์บ”๋ฒ„์Šค ๊ธฐ๋ฐ˜ UI

  • ์žฌ์‹œ๋„๊ฐ€ ํ•„์š”ํ•œ ๋ถˆ์•ˆ์ •ํ•œ ์š”์†Œ

  • ์ž๋™์œผ๋กœ ๋Œ€๊ธฐ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๋‚ด๋น„๊ฒŒ์ด์…˜

  • ์ค‘์š”ํ•œ ์š”์†Œ๋ฅผ ๊ฐ€๋ฆฌ๋Š” ๊ด‘๊ณ ๋‚˜ ํŒ์—…

  • ๋ ˆ์ด์•„์›ƒ์— ๋”ฐ๋ผ ๋ทฐํฌํŠธ ํฌ๊ธฐ๋ฅผ ๋งž์ถฐ์•ผ ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜

  • ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ์ง„ํ–‰ํ•˜๊ธฐ ์ „์— ํŽ˜์ด์ง€๊ฐ€ ์™„์ „ํžˆ ๋กœ๋“œ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ

  • ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋Š” Playwright ์ฝ”๋“œ ์Šค๋‹ˆํŽซ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹ ๋ขฐ์„ฑ ์žˆ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์Šค๋‹ˆํŽซ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

ํ…Œ์ŠคํŠธ์— Playwright ์ฝ”๋“œ ์Šคํ…์„ ์ถ”๊ฐ€ํ•œ ๋‹ค์Œ, ํ•ด๋‹น ์Šคํ…์— ์ฝ”๋“œ ์Šค๋‹ˆํŽซ์„ ๋ณต์‚ฌ/๋ถ™์—ฌ๋„ฃ๊ธฐ ํ•˜์„ธ์š”.

์Šค๋‹ˆํŽซ์— ์žˆ๋Š” ๋กœ์ผ€์ดํ„ฐ๋Š” ํŽ˜์ด์ง€ ์ƒ์˜ ์‹ค์ œ ๋Œ€์ƒ ์š”์†Œ์˜ ๋กœ์ผ€์ดํ„ฐ๋‚˜ ์…€๋ ‰ํ„ฐ๋กœ ๊ต์ฒดํ•˜๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์„ธ์š”.
JavaScript ์…€๋ ‰ํ„ฐ, CSS ์…€๋ ‰ํ„ฐ, ๋˜๋Š” Playwright ๋กœ์ผ€์ดํ„ฐ ์ค‘ ํŽธํ•œ ๊ฒƒ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ € ๋’ค๋กœ/์•ž์œผ๋กœ ๋‚ด๋น„๊ฒŒ์ด์…˜

๋‚ด๋น„๊ฒŒ์ด์…˜์ด ํ•„์š”ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค ์œ„์น˜์— Playwright ์ฝ”๋“œ ์Šคํ…์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

๋’ค๋กœ ๊ฐ€๊ธฐ:

await page.goBack()

์•ž์œผ๋กœ ๊ฐ€๊ธฐ:

await page.goForward()

๋ทฐํฌํŠธ ํฌ๊ธฐ ๋ณ€๊ฒฝ

์˜ˆ์ƒ๋œ ๋ Œ๋”๋ง์— ๋งž๊ฒŒ ํŽ˜์ด์ง€ ํฌ๊ธฐ๋ฅผ ํŠน์ • ๋„ˆ๋น„์™€ ๋†’์ด๋กœ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

await page.setViewportSize({ width: 999, height: 999 });

์š”์†Œ ๊ฐ•์ œ ํด๋ฆญ

์š”์†Œ๊ฐ€ "์ด์ƒ์ ์ธ" ํด๋ฆญ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๊ฐ€ ์•„๋‹ˆ๋”๋ผ๋„(์˜ˆ: ๋‹ค๋ฅธ ์š”์†Œ์— ๊ฐ€๋ ค์ ธ ์žˆ๋Š” ๊ฒฝ์šฐ), ๊ฐ•์ œ๋กœ ํด๋ฆญ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

await page.click('#my-button', { force: true });

๋ฐฉํ•ด ์š”์†Œ ์ œ๊ฑฐ (์˜ˆ: ๊ด‘๊ณ )

ํ…Œ์ŠคํŠธ ์ž‘์—…์— ๋ฐฉํ•ด๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” ๊ด‘๊ณ ๋‚˜ ํ”Œ๋กœํŒ… ๋ฐฐ๋„ˆ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

await page.evaluate(() => {
	const ad = document.querySelector('.ads-banner');
	if (ad) ad.remove();
});

๋ถˆ์•ˆ์ •ํ•œ ๋ฒ„ํŠผ์— ๋Œ€ํ•œ ํด๋ฆญ ์žฌ์‹œ๋„

์ผ๋ถ€ ๋ฒ„ํŠผ์€ ์ฒซ ์‹œ๋„์—์„œ ์•ˆ์ •์ ์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ฝ”๋“œ๋Š” ์‹คํŒจ ์‹œ ํ•œ ๋ฒˆ ๋” ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.

try {
	await page.click('#unstable-button');
} catch (e) {
	console.warn('Retrying button click...');
	await page.click('#unstable-button');
}

ํŽ˜์ด์ง€ ๋˜๋Š” ์š”์†Œ๊ฐ€ ์ค€๋น„๋  ๋•Œ๊นŒ์ง€ ํ…Œ์ŠคํŠธ ๋ฐ ์ƒˆ๋กœ๊ณ ์นจ

ํŽ˜์ด์ง€๊ฐ€ ๊ฐ€๋” ๋ถˆ์•ˆ์ •ํ•œ ์ƒํƒœ๋กœ ๋กœ๋“œ๋˜๋Š” ๊ฒฝ์šฐ, ์ƒˆ๋กœ๊ณ ์นจํ•˜์—ฌ ์ค€๋น„ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

for (let i = 0; i < 5; i++) {
	await page.reload();
	if (await page.isVisible('#ready')) break;
    console.log("Element/page is not ready!");
}

๋งํฌ ํด๋ฆญ ํ›„ ๋‚ด๋น„๊ฒŒ์ด์…˜ ๋Œ€๊ธฐ

๋งํฌ ํด๋ฆญ์œผ๋กœ ์ธํ•ด ๋‚ด๋น„๊ฒŒ์ด์…˜์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ, ํŽ˜์ด์ง€๊ฐ€ ์™„์ „ํžˆ ๋กœ๋“œ๋  ๋•Œ๊นŒ์ง€ ๋ช…์‹œ์ ์œผ๋กœ ๊ธฐ๋‹ค๋ฆฐ ํ›„ ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ์ง„ํ–‰ํ•˜์„ธ์š”.

await Promise.all([
	page.waitForNavigation(),
	page.click('a.next-page'),
]);