0

Ich verwende Chrome stabil 60 (https://chromedevtools.github.io/devtools-protocol/1-2/Page/) für Headless. Ich muss in der Lage, dies zu tun: 1So rufen Sie Page.navigate auf und lösen das zugehörige Page.loadEventFired aus?

  • Nehmen screenshot1

  • auf Seite 2
  • Navigieren

    1. Navigieren zur Seite (nach Seite 1 wird durchgeführt)

    2. Nehmen screenshot2

    Allerdings kann ich nicht 01 sehenzweimal, weil Page.loadEventFired auf dem neuesten abholen wird.

    Ich möchte nicht Canary verwenden, weil es so instabil ist (Screenshot funktioniert nicht einmal richtig). Also ich denke Target ist keine Option (wenn es sein könnte).

    Was ist der beste Weg, url Navigation seriell so zu machen?

    Ich schaute auf https://github.com/LucianoGanga/simple-headless-chrome, um zu sehen, wie sie es (await mainTab.goTo) tun, aber scheint noch nicht herauszufinden.

  • Antwort

    0

    Der Link hier https://github.com/cyrus-and/chrome-remote-interface/issues/92 gab mir eine Idee:

    const fs = require('fs'); 
    
    const CDP = require('chrome-remote-interface'); 
    
    function loadForScrot(url) { 
        return new Promise(async (fulfill, reject) => { 
         const tab = await CDP.New(); 
         const client = await CDP({tab}); 
         const {Page} = client; 
         Page.loadEventFired(() => { 
          fulfill({client, tab}); 
         }); 
         await Page.enable(); 
         await Page.navigate({url}); 
        }); 
    } 
    
    async function process(urls) { 
        try { 
         const handlers = await Promise.all(urls.map(loadForScrot)); 
         for (const {client, tab} of handlers) { 
          const {Page} = client; 
          await CDP.Activate({id: tab.id}); 
          const filename = `/tmp/scrot_${tab.id}.png`; 
          const result = await Page.captureScreenshot(); 
          const image = Buffer.from(result.data, 'base64'); 
          fs.writeFileSync(filename, image); 
          console.log(filename); 
          await client.close(); 
         } 
        } catch (err) { 
         console.error(err); 
        } 
    } 
    
    process(['http://example.com', 
         'http://example.com', 
         'http://example.com', 
         'http://example.com', 
         'http://example.com', 
         'http://example.com', 
         'http://example.com', 
         'http://example.com']); 
    
    0

    Kasse die neue Bibliothek von Google-Team puppeteer

    Verwandte Themen