Ich versuche mit Puppenspieler zu einer Seite zu navigieren, warte bis die Webapp einen bestimmten Zustand erreicht, mache einen Screenshot und gehe. Wenn der SPA in dem Zustand ist, in dem ich einen Screenshot machen möchte, ruft er eine Funktion auf. Ich habe Schwierigkeiten, meinen Kopf um Async-Js-Code zu wickeln.Puppenspieler machen einen Screenshot nachdem eine exponierte Funktion aufgerufen wurde
Mein Code sieht wie folgt aus: „. Session geschlossen Höchstwahrscheinlich wird die Seite geschlossen wurde“
const puppeteer = require('puppeteer');
const url = 'http://example.com/';
const width = 300;
const height = 250;
const path = '/vagrant/tmp/screenshot.jpg';
async function takeScreenshoot(url, width, height, path) {
"use strict";
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.setViewport({width: width, height: height});
await page.exposeFunction('interestingFunction', (async data => {
console.log('Interesting function has been called. Taking a screenshot now.');
await page.screenshot({path: path});
await browser.close();
}));
await page.goto(url);
}
(async() => {
"use strict";
await takeScreenshoot(url, width, height, path);
})();
Aber wenn ich screenshot.js
nennen, bekomme ich Warnungen über ein nicht behandelte Versprechen sagen
node --trace-warnings screenshot.js
Interesting function has been called. Taking a screenshot now.
(node:2572) Error: Protocol error (Runtime.evaluate): Session closed. Most likely the page has been closed.
at Session.send (/vagrant/node_modules/puppeteer/lib/Connection.js:167:29)
at Page._onConsoleAPI (/vagrant/node_modules/puppeteer/lib/Page.js:296:20)
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:188:7)
(node:2572) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
at emitWarning (internal/process/promises.js:78:15)
at emitPendingUnhandledRejections (internal/process/promises.js:95:11)
at process._tickCallback (internal/process/next_tick.js:189:7)
Wenn ich die await browser.close()
von der Linie 18 gibt entfernen, ist keine Warnung, aber das Skript nie beendet.
Jetzt macht die interstingFunction()
ein wenig mehr, aber es ist sicher, es dem Fenster für die Webanwendung auszusetzen. Ich habe versucht, ein Beispiel für ein minimales Skript oben zu geben, das immer noch fehlschlägt.
Ich benutze Knoten v8.5.0.
Bin ich damit falsch?
Ihre 'page.goto (url)' Aufruf scheint zu sein, ist fehl am Platz. – nilobarp
Ich folge dem Beispiel von https://github.com/GoogleChrome/puppeteer/blob/master/examples/custom-event.js, um die Funktion zuerst anzuzeigen und dann auf die Seite zu gehen. Bitte beachten Sie auch, dass '' browser.close(); '' in einem Callback erwartet wird, das innerhalb weniger Sekunden nach dem Laden der App aufgerufen wird. Es sollte also nicht wirklich wichtig sein. Moving 'award page.goto (url);' hat die Warnungen nicht zum Schweigen gebracht. – hjm27