Puppeteer: рдЯреНрд░реЗрд╕рд┐рдВрдЧ.рд╕реНрдЯрд╛рд░реНрдЯ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 18 рдЕрдХреНрддреВре░ 2017  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: puppeteer/puppeteer

рдореИрдВ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд╡рд┐рдХрд▓реНрдк рд╕рдХреНрд╖рдо рдХрд╛рд░реНрдп рдХреЗ рд╕рд╛рде рдПрдХ рдореВрд▓ рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЯреНрд░реЗрд╕.рдЬреЗрд╕рди рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдИ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдирд╣реАрдВред

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.tracing.start({screenshots: true, path: 'trace.json'});  
  await page.goto('https://www.google.com');
  await page.tracing.stop();  
  await browser.close();
})();

рдкрд░рд┐рдгрд╛рдо рдХреА рдХреНрдпрд╛ рдЙрдореНрдореАрдж рд╣реИ?

  • рдЯреНрд░реЗрд╕.рдЬреЗрд╕рди рдХреЗ рд╕рд╛рде рдЯрд╛рдЗрдорд▓рд╛рдЗрди рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рддреИрдпрд╛рд░ рдХрд░реЗрдВ

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ?

  • рдХреЗрд╡рд▓ рдЯреНрд░реЗрд╕.рдЬреЗрд╕рди рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИред рдХреЛрдИ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдЖрдЙрдЯрдкреБрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

  • рдХрдардкреБрддрд▓реА рд╕рдВрд╕реНрдХрд░рдг: 0.12.0
  • рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдо / рдУрдПрд╕ рд╕рдВрд╕реНрдХрд░рдг: рдореИрдХ рдУрдПрд╕рдПрдХреНрд╕ 10.13
  • рдпреВрдЖрд░рдПрд▓ (рдЕрдЧрд░ рд▓рд╛рдЧреВ рд╣реЛ): google.com

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдпрджрд┐ рдЖрдк рдЯреНрд░реЗрд╕ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рддреНрд╡рд░рд┐рдд рдЙрджрд╛рд╣рд░рдг @Everettss рдЙрджрд╛рд╣рд░рдг 1368 рдореЗрдВ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред

const puppeteer = require('puppeteer');
const fs = require('fs');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  await page.tracing.start({ screenshots: true, path: 'trace.json' });
  await page.goto('https://www.google.com', { timeout: 60000 });
  await page.tracing.stop();

  // --- extracting data from trace.json ---
  const tracing = JSON.parse(fs.readFileSync('./trace.json', 'utf8'));
  const traceScreenshots = tracing.traceEvents.filter(x => (
      x.cat === 'disabled-by-default-devtools.screenshot' &&
      x.name === 'Screenshot' &&
      typeof x.args !== 'undefined' &&
      typeof x.args.snapshot !== 'undefined'
  ));
  traceScreenshots.forEach(function(snap, index) {
    fs.writeFile('trace-screenshot-'+index+'.png', snap.args.snapshot, 'base64', function(err) {
      if (err) {
        console.log('writeFile error', err);
      }
    });
  });
  // --- end extracting data from trace.json ---

  await page.close();
})();

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

@kesava рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдЯреНрд░реЗрд╕ рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд┐рдП рдЧрдП рд╣реИрдВ: trace.json рдлрд╝рд╛рдЗрд▓ рдХреЛ devtools рдкреНрд░рджрд░реНрд╢рди рдкреИрдирд▓ рдореЗрдВ рдбреНрд░реИрдЧ-рдПрдВрдб-рдбреНрд░реЙрдк рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред

рдпрджрд┐ рдЖрдк рдЯреНрд░реЗрд╕ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рддреНрд╡рд░рд┐рдд рдЙрджрд╛рд╣рд░рдг @Everettss рдЙрджрд╛рд╣рд░рдг 1368 рдореЗрдВ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред

const puppeteer = require('puppeteer');
const fs = require('fs');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  await page.tracing.start({ screenshots: true, path: 'trace.json' });
  await page.goto('https://www.google.com', { timeout: 60000 });
  await page.tracing.stop();

  // --- extracting data from trace.json ---
  const tracing = JSON.parse(fs.readFileSync('./trace.json', 'utf8'));
  const traceScreenshots = tracing.traceEvents.filter(x => (
      x.cat === 'disabled-by-default-devtools.screenshot' &&
      x.name === 'Screenshot' &&
      typeof x.args !== 'undefined' &&
      typeof x.args.snapshot !== 'undefined'
  ));
  traceScreenshots.forEach(function(snap, index) {
    fs.writeFile('trace-screenshot-'+index+'.png', snap.args.snapshot, 'base64', function(err) {
      if (err) {
        console.log('writeFile error', err);
      }
    });
  });
  // --- end extracting data from trace.json ---

  await page.close();
})();

@QmarkC рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреНрд░реЛрдо рдХреНрд░реИрд╢ рд╣реЛрдиреЗ рдкрд░ рдпрд╣ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдореИрдВ рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рддрд╛рдХрд┐ рдореИрдВ рдЬрд╛рди рд╕рдХреВрдВ рдХрд┐ рдХреНрд░реЛрдо рдХрд┐рд╕ рдмрд┐рдВрджреБ рдкрд░ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИ?

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

sheweichun picture sheweichun  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

vonGameTheory picture vonGameTheory  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

bricss picture bricss  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ebidel picture ebidel  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

td0m picture td0m  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ