Playwright - Microsoft Playwright рдФрд░ рдирдпрд╛ рдкрд░реАрдХреНрд╖рдг рдЙрдкрдХрд░рдг



рдореИрдВ рджрд╕ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдФрд░ рд▓реЗрдЦрди рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдкрд┐рдЫрд▓реЗ рдЪрд╛рд░ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдореИрдВ рд╣реЗрдЗрд╕реЗрдирдЧрдВрдЬ рд╕рдореНрдореЗрд▓рди рдХреА рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рдорд┐рддрд┐ рдореЗрдВ рд░рд┐рдкреЛрд░реНрдЯ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЖрдЬ рдореИрдВ рдПрдВрдб-рдЯреВ-рдПрдВрдб рдЯреЗрд╕реНрдЯ, рдХреНрд░реЙрд╕-рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдХреНрд╕реЗрд╕рд┐рдмрд┐рд▓рд┐рдЯреА рдФрд░ рдкреНрд▓реЗ рд░рд╛рдЗрдЯ рд╡рд░реНрдЬрди 0.10.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд░реЛрдорд╛рдВрдЪ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред

рд╢реБрд░реВ рд╕реЗ рдЕрдВрдд рддрдХ


рд╣рдореЗрдВ рдЕрдВрдд-рд╕реЗ-рдЕрдВрдд рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рд╡реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдХрд╕реНрдЯрдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЙрддреНрдкрд╛рдж рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рдПред рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕рднреА рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рднреА рд▓рд┐рдкрд┐рдпреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕реЗ рдЕрдзрд┐рдХ рдорд╣рдВрдЧрд╛ рдФрд░ рд▓рдВрдмрд╛ рд╣реИред

рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЙрдкрдХрд░рдг рд╣реИрдВ: рд╕реЗрд▓реЗрдирд┐рдпрдо, рдХрдардкреБрддрд▓реА, рдкреНрд░реЛрдЯреНрд░реЗрдХреНрдЯрд░, рд╕рд░реВ рдФрд░ рдЕрдиреНрдпред рджреЛ рд╣рдлреНрддреЗ рдкрд╣рд▓реЗ, рдПрдХ рдирдпрд╛ рдЯреВрд▓ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ - рдирд╛рдЯрдХрдХрд╛рд░, рдЬрд┐рд╕ рдкрд░ рдкреНрдпреВрдиреЗрд╕реЗрдЯрд░ рдХреЗ рдбреЗрд╡рд▓рдкрд░ рдПрдВрдбреНрд░реА рд▓реБрд╢реНрдирд┐рдХреЛрд╡ рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдерд╛ред рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреНрд░реЙрд╕-рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред




рдШреЛрд╖рдгрд╛ рдХреЗ рд╕рд╛рде рдПрдВрдбреНрд░реА рд▓реБрд╢реНрдирд┐рдХреЛрд╡ рдХрд╛ рдореВрд▓ рдЯреНрд╡реАрдЯ ред

рдХрдардкреБрддрд▓реА рдмрдирд╛рдо рдирд╛рдЯрдХрдХрд╛рд░


рдореИрдВрдиреЗ рдХрдИ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ Puppeteer рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛, рдФрд░ рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рдпрд╣ рдмреБрд░рд╛ рдирд╣реАрдВ рдерд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ рдпрд╛рдж рдЖрдпрд╛ рдХрд┐ рдкрд┐рдЫрд▓реЗ рд╕рд╛рд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ, рдкреБрдкреНрддреЗрдереЗрд░ рдиреЗ рд╕рдВрд╕реНрдХрд░рдг 2.0 рдХреА рдПрдХ рдмрдбрд╝реА рд░рд┐рд▓реАрдЬрд╝ рдХреА рдереА ред рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВрдиреЗ рдЙрдирдХреЗ рднрдВрдбрд╛рд░ рдореЗрдВ рджреЗрдЦрд╛ , рддреЛ рдореБрдЭреЗ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рддрд╕реНрд╡реАрд░ рджрд┐рдЦрд╛рдИ рджреА:


рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд░рдВрдЧ рдЕрдВрдзрд╛ рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдереЛрдбрд╝рд╛ рдмрд╣реБрдд рд▓рд╛рд▓ рд╣реВрдВред

рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдХреНрдпреЛрдВ Playwright рдмреЗрд╣рддрд░ рд╣реИ - рдПрдХ рдирдпрд╛ рдЙрдкрдХрд░рдг рдЬреЛ Microsoft рд╕рдВрдЧрдарди рдореЗрдВ GitHub рдкрд░ рдмрдбрд╝реЗ рдХрд░реАрдиреЗ рд╕реЗ рдЯрд┐рдХреА рд╣реБрдИ рд╣реИ ред

рдХреНрдпреЛрдВ рдХрдардкреБрддрд▓реА рдЕрдЪреНрдЫрд╛ рд╣реИ? рдпрд╣ рдПрдХ рдмрд┐рдирд╛ рд╕рд┐рд░ рд╡рд╛рд▓рд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ DevTools рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ , рдЗрд╕рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рд╕реЗрд▓реЗрдирд┐рдпрдо рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬрд╝ рдФрд░ рдЕрдзрд┐рдХ рд╕реНрдерд┐рд░ рд╣реИрдВ, рдФрд░ рдЖрдк рдЙрдиреНрд╣реЗрдВ рд╕реБрдЦрдж рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ ред

Playwright рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ? рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рд╕рднреА рдХрдардкреБрддрд▓реА рдмрдиреНрд╕ рд╣реИред рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдпрд╣ рдЖрдкрдХреЛ рдХреНрд░реЙрд╕-рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ - рдЖрдк рдкрд░реАрдХреНрд╖рдг рдХреЛрдб рдореЗрдВ рдХрд┐рд╕реА рднреА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ : рд╡реЗрдмрдХреАрдЯ , рдХреНрд░реЛрдорд┐рдпрдо рдФрд░ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ред

рдЖрддреНрдо-рд╢рд┐рдХреНрд╖рд╛ рдХрд╛ рдПрдХ рдХреНрд╖рдг: рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЗрдВрдЬрди
WebKit тАФ Safari .

Chromium тАФ Blink, Webkit. Blink Google Chrome, ., Microsoft Edge, Opera Vivaldi.

Firefox тАФ Gecko. Chro Servo, Rust.


Playwright рдкрд░ рдХреНрд░реЙрд╕-рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЯреЗрд╕реНрдЯ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ? рдореБрдЭреЗ рдПрдирдкреАрдПрдо , рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рд╣рдмреНрд░, рдкрдврд╝рдиреЗ рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреЗ рд▓рд┐рдП рд╕реНрдХреВрд▓ рдЕрдВрдЧреНрд░реЗрдЬреА, рдПрдХ рдХрдк рдХреЙрдлреА рдФрд░ рд╕рд╛рдврд╝реЗ 15 рдорд┐рдирдЯ рдЪрд╛рд╣рд┐рдПред

Playwright рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ ред рд╣рдо рдХрдВрд╕реЛрд▓ рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
npm i playwright

рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд╣реИрдмрд░ред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдПрдБ:

const playwright = require('playwright');

(async () => {
   for (const browserType of ['chromium', 'firefox', 'webkit']) {
       const browser = await playwright[browserType].launch();
       const context = await browser.newContext();
       const page = await context.newPage('http://habr.com/');

       await page.screenshot({ path: `screenshots/example-${browserType}.png` });
       await browser.close();
   }
})();

Puppeteer рдкрд░ рдХреЛрдб рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реЛрдЧрд╛:

const puppeteer = require('puppeteer');

(async () => {
   const browser = await puppeteer.launch();
   const page = await browser.newPage();
   await page.goto('https://habr.com');
   await page.screenshot({path: 'screenshots/example.png'});

   await browser.close();
})();

рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдкрд░реАрдХреНрд╖рдг рддреАрди рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕рдЪ рд╣реИ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рд╡рд┐рд╢реЗрд╖ рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рдЬреЛ рдЖрдо рддреМрд░ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рдкреНрд░рд▓реЗрдЦрди рдХрд╣рддрд╛ рд╣реИ рдХрд┐ Playwright рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддрд╛ рд╣реИред рдЖрдк рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 const browser = await chromium.launch();  // Or 'firefox' or 'webkit'.
 const context = await browser.newContext();

Puppeteer рдореЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдкрде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ ред PlayWright рдореЗрдВ рдРрд╕реА рдХреЛрдИ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдЗрдВрдЬрди рдХрд╛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рд╣рдореЗрд╢рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдХреА рдЪрд░реНрдЪрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА GitHub рдкрд░ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИред

рд╡реИрд╕реЗ, рдпрджрд┐ рдЖрдк рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдкрд░реАрдХреНрд╖рдг рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВред Playwright рдФрд░ Puppeteer Chromium рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд▓реЗрддреЗ рд╣реИрдВ:


рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рдлреЛрдВрдЯ рд╡рд┐рднрд┐рдиреНрди рдЖрдХрд╛рд░реЛрдВ рдХреЗ рд╣реЛрддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдЧрд┐рдЯрд╣рдм рдкрд░ рдПрдХ рдЯрд┐рдХрдЯ рд╢реБрд░реВ рдХрд┐рдпрд╛ ред

Playwright WebKit рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдореЛрдмрд╛рдЗрд▓ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдкрд░реАрдХреНрд╖рдгред рд▓реЗрдХрд┐рди рд╕рднреА рд╕реНрдорд╛рд░реНрдЯрдлрд╝реЛрди рдФрд░ рдЯреИрдмрд▓реЗрдЯ рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рд╣реИрдВ - рдЯреЗрд╕реНрдЯ рдЪрд▓рд╛рдиреЗ рдХреЗ рджреМрд░рд╛рди рдЖрдкрдХреЛ рдЕрдкрдиреА рдЬрд╝рд░реВрд░рдд рдХрд╛ рдЪрдпрди рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ? рдореБрдЭреЗ рдбрд┐рд╡рд╛рдЗрд╕рдбрд╛рдЗрд╕реНрдХреНрд░рд┐рдкреНрдЯрд░реНрд╕.рдЯреАрдПрд╕ рдХреЛрдб рдореЗрдВ 76 рдбрд┐рд╡рд╛рдЗрд╕ рдорд┐рд▓реЗ , рдЬрд┐рдирдореЗрдВ рд▓реЛрдХрдкреНрд░рд┐рдп рдореЙрдбрд▓ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВBlackBerry рдФрд░ JioPhone 2. рдЙрдкрдпреЛрдЧреА рд╕реЗ: рдЖрдк рд▓реИрдВрдбрд╕реНрдХреЗрдк рдореЛрдб рдореЗрдВ iPhone 8 рдФрд░ iPhone 8 рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВред рдкрд░реАрдХреНрд╖рдг рдХреЛрдб рд▓рдЧрднрдЧ рдПрдХ рдирд┐рдпрдорд┐рдд рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рдорд╛рди рд╣реИ:

const { webkit, devices } = require('playwright');
const deviceType = devices['iPhone 8'];

(async () => {
   const browser = await webkit.launch();
   const context = await browser.newContext({
       viewport: deviceType.viewport,
       userAgent: deviceType.userAgent
   });
   const page = await context.newPage('http://habr.com');
   await page.screenshot({ path: `example-${deviceType.name}.png`});
   await browser.close();
})();

Playwright рдХреА рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬрд┐рдпреЛрд▓реЛрдХреЗрд╢рди рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ, рдпрд╣ рдорд╛рдирдЪрд┐рддреНрд░реЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╕рдордп рдХрд╛рдо рдЖрдПрдЧрд╛ред рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдВрджрд░реНрдн рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:

const context = await browser.newContext({
   viewport: iPhone11.viewport,
   userAgent: iPhone11.userAgent,
   geolocation: { longitude: 12.492507, latitude: 41.889938 },
   permissions: { 'https://yandex.ru/maps': ['geolocation'] }
});

рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рд╡рд░реНрд╖ рдирд╣реАрдВ рд╣реИ рдФрд░ рдХрднреА-рдХрднреА рдпрд╣ рджреЗрдЦрдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИред Puppeteer рдХреЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдерд╛ рдЬреЛ headless: falseрдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдВрдбреЛ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рдерд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╣реА рд╡рд┐рдХрд▓реНрдк Playwright рдХреЗ рд╕рд╛рде рд╣реИ:

puppeteer.launch({headless: false});
playwright.launch({headless: false});

рдЪреВрдБрдХрд┐ рджреЛрдиреЛрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХреЛрдб рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЗрд╕реЗ рд╣рдбрд╝рдк рдирд╣реАрдВ рд╕рдХрддреЗред рдХрдардкреБрддрд▓реА рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдПрдХ рдкреВрд░рд╛ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рд╣реИ, рд▓реЗрдХрд┐рди Playwright рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, Playwright рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдХреЛрдИ рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди GitHub рдкрд░ рдПрдХ рдЯрд┐рдХрдЯ рд╣реИред рдпрд╣ рдПрдХ рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫреЗ рдХрд╛рд░рдг рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред рдФрд░ рдирд╛рдЯрдХрдХрд╛рд░ рдФрд░ рдЬреЗрд╕реНрдЯ рдХреЗ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореИрдВрдиреЗ рдЕрдкрдиреЗ рднрдВрдбрд╛рд░ рдореЗрдВ рд░рдЦреЗ ред

рдХреНрдпрд╛ рдпрд╣ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ?


рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Playwright рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЬрд▓реНрджреА рд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рдмрдЧ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдлрд╝рд╛рдЗрд▓реЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рдЕрднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдбреЗрд╡рд▓рдкрд░реНрд╕ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдЗрд╕реЗ рдареАрдХ рдХрд░ рджреЗрдВрдЧреЗ рдФрд░ рдпрд╣ Puppeteer рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЦрд░рд╛рдм рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдЖрдк рдкреНрд▓реЗрд░рд╛рдЗрдЯ рдХреЛ рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЯрд┐рдХрдЯ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд░рд╣реЗрдВред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Playwright рдЯреАрдо рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдмрд╣реБрдд рд╣реА рдмреЗрд╣рддрд░реАрди рддрд░реАрдХреЗ рд╕реЗ рдПрдХ рд╕рд╛рде рд░рдЦрдирд╛ рдЪрд╛рд╣рддреА рд╣реИред рдЧрд┐рдЯрд╣рдм рдЯрд┐рдХрдЯреЛрдВ рдореЗрдВ, рдореБрдЭреЗ рдПрдкреАрдЖрдИ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд┐рдЪрд╛рд░ рдорд┐рд▓реЗ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд░реВ рдЬреИрд╕реА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ ред

Playwright рдХрдИ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреНрд░реЙрд╕-рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдирд╛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рд╕рдЪ рд╣реИ, рдЕрдм рдЙрд╕рдХреЗ рдкрд╛рд╕ 0.10.0 рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рдмрд╣реБрдд рд╕рд╛рд░реЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рд╕реНрд▓реИрдХрдСрд╡рд░рдлреНрд▓реЛ рдореЗрдВ рдХреЗрд╡рд▓ рдЫрд╣ рдкреНрд░рд╢реНрди рд╣реИрдВред рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк Playwright рдХреА рд░рд┐рд▓реАрдЬрд╝ рдХреЛ рдмрд╛рд░реАрдХреА рд╕реЗ рджреЗрдЦреЗрдВ, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдЗрд╕реЗ рдкреНрд░реЛрдбрдХреНрд╢рди рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рдореЗрдВ рдЬрд▓реНрджрдмрд╛рдЬреА рди рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдПрдкреАрдЖрдИ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред

Heisenbug рдкрд░ рдбреЗрд╡рд▓рдкрд░ рдирд╛рдЯрдХрдХрд╛рд░


рдореИрдВ рд╕рдорд╛рдЪрд╛рд░ рд╕рд╛рдЭрд╛ рдХрд░рддрд╛ рд╣реВрдВ: рдЖрдВрджреНрд░реЗрдИ рд▓реБрд╢реНрдирд┐рдХреЛрд╡ рд╣реЗрдЗрд╕реНрдмрдЧ 2020 рдкреИрдЯрд░ рд╕рдореНрдореЗрд▓рди рдореЗрдВ рдкреНрд▓реЗрд░рд╛рдЗрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рд╕реЗрдВрдЯ рдкреАрдЯрд░реНрд╕рдмрд░реНрдЧ рдореЗрдВ 8-9 рдЕрдкреНрд░реИрд▓ рдХреЛ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЙрд╕рдХреЗ рд▓рд┐рдП рдХрдИ рд╕рд╡рд╛рд▓ рд╣реИрдВ:

  • рдирдИ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ Playwright рдХреНрдпреЛрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдирд╛рдЯрдХ рдХрд╣рд╛рдБ рд╣реЛрддрд╛ рд╣реИ
  • рдЙрджрд╛рд╣рд░рдг рдХрдм рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗ рдФрд░ рд╕рдВрд╕реНрдХрд░рдг 1.0 рдХреА рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдХрд┐рддрдирд╛ рд╕рдордп рд▓рдЧреЗрдЧрд╛
  • рдХреНрдпрд╛ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдХрдардкреБрддрд▓реА рднрдВрдбрд╛рд░ рдореЗрдВ рдмреИрдЬ рд╣рд░реЗ рд░рдВрдЧ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреЗ рд╣реИрдВ

UPD: рдЖрдВрджреНрд░реЗрдИ рд▓реБрд╢реНрдирд┐рдХреЛрд╡ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ "рдпрджрд┐ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдмреЗрд╣рддрд░ рдХрд╛рдо рдХрд░рддреА рд╣реИрдВ, рддреЛ рдпрд╣ рд╕рд╣реА рд╣реЛрдЧрд╛" рдЕрднреА рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рдЗрд╕рдореЗрдВ, рд╣рдордиреЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЗрдВрдЬрди рдФрд░ рдмрд╛рд╣рд░реА рдПрдХреАрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рдмрд╛рддреЗрдВ рдХреАрдВред

рдЯрд┐рдХрдЯ рд╣рд╛рдЗрдЬреЗрдирдмрдЧ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рд╣реИрдВ ред рдирд╛рдЯрдХрдХрд╛рд░ рдФрд░ рдХрдардкреБрддрд▓реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд░рд╛рдп - рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд▓рд┐рдЦреЗрдВред
рдФрд░ рдЕрдЧрд░ рдЖрдк рдкреЛрд╕реНрдЯ рдХреЛ рдЕрдВрдд рддрдХ рдкрдврд╝рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдкреНрдпреВрдкреЗрдЪрд░ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдПрдВрдбреНрд░реАрдЬрд╝ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХреЛ рдЕрдВрддрд┐рдо рд╣реЗрдЗрдЬрд╝реЗрдирдмрдЧ рд╕рдореНрдореЗрд▓рди рд╕реЗ рджреЗрдЦреЗрдВ, рдЬрд╣рд╛рдВ рдЙрдиреНрд╣реЛрдВрдиреЗ 55 рдорд┐рдирдЯ рдХреЗ рд▓рд┐рдП рдкреНрдпреВрдкреАрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдереАред

Source: https://habr.com/ru/post/undefined/


All Articles