Veel Gestelde Vragen

Wat is de status van ondersteuning voor meerdere browsers?

Officiële Firefox-ondersteuning is experimenteel. De voortdurende samenwerking met Mozilla heeft tot doel algemene end-to-end testgebruiksscenario's te ondersteunen, waarvoor ontwikkelaars cross-browser dekking verwachten. Het Puppeteer-team heeft input van gebruikers nodig om de Firefox-ondersteuning te stabiliseren en ontbrekende API’s onder onze aandacht te brengen.

Vanaf Puppeteer v2.1.0 kunt u puppeteer.launch({product: 'firefox'}) specificeren om uw Puppeteer-scripts in Firefox Nightly uit te voeren, zonder aanvullende aanpassingen
pleisters. Terwijl voor een ouder experiment een gepatchte versie van Firefox nodig was, werkt de huidige aanpak met 'standaard' Firefox.

We blijven samenwerken met andere browserleveranciers om Puppeteer-ondersteuning te bieden aan browsers, zoals Safari. Deze inspanning omvat het verkennen van een standaard voor het uitvoeren van opdrachten in meerdere browsers (in plaats van te vertrouwen op het niet-standaard DevTools Protocol dat door Chrome wordt gebruikt).

Wat zijn de doelen en principes van Puppeteer?

De doelstellingen van het project zijn:

  • Zorg voor een slanke, canonieke bibliotheek die de mogelijkheden van het DevTools Protocol benadrukt.
  • Geef een referentie-implementatie op voor vergelijkbare testbibliotheken. Uiteindelijk zouden deze andere raamwerken Puppeteer als basislaag kunnen gebruiken.
  • Vergroot de adoptie van headless/geautomatiseerde browsertests.
  • Help dogfood met nieuwe DevTools Protocol-functies... en vang bugs!
  • Lees meer over de pijnpunten van geautomatiseerde browsertests en help deze hiaten op te vullen.

We passen de Chromium-principes aan om ons te helpen productbeslissingen te nemen:

  • Snelheid : Puppeteer heeft bijna geen prestatieoverhead ten opzichte van een geautomatiseerde pagina.
  • Beveiliging : Puppeteer werkt buiten het proces met betrekking tot Chromium, waardoor het veilig is om potentieel kwaadaardige pagina's te automatiseren.
  • Stabiliteit : Poppenspeler mag niet schilferig zijn en mag geen geheugen lekken.
  • Eenvoud : Puppeteer biedt een API op hoog niveau die gemakkelijk te gebruiken, te begrijpen en te debuggen is.

Vervangt Puppeteer Selenium/WebDriver?

Nee . Beide projecten zijn om heel verschillende redenen waardevol:

  • Selenium/WebDriver richt zich op cross-browser automatisering; de waardepropositie is één enkele standaard-API die in alle grote browsers werkt.
  • Poppenspeler richt zich op chroom; de waardepropositie ervan is rijkere mogelijkheden en hogere betrouwbaarheid.

Dat gezegd hebbende, kun je Puppeteer gebruiken om tests uit te voeren tegen Chromium, zoals het gebruik van de door de community aangestuurde jest-puppeteer . Hoewel dit waarschijnlijk niet je enige testoplossing zou moeten zijn, heeft het wel een paar goede punten vergeleken met WebDriver:

  • Puppeteer vereist geen configuratie en wordt geleverd met de Chromium-versie waarmee het het beste werkt. Het is beter om een ​​paar tests uit te voeren waarin alleen Chromium wordt uitgevoerd, dan helemaal geen tests.
  • Puppeteer heeft een gebeurtenisgestuurde architectuur, die veel potentiële schilfers wegneemt. Er zijn geen kwaadaardige "sleep(1000)"-aanroepen nodig in poppenspelerscripts.
  • Poppenspeler werkt standaard zonder hoofd, waardoor hij snel kan rennen. Puppeteer v1.5.0 maakt ook browsercontexten zichtbaar, waardoor het mogelijk wordt om de testuitvoering efficiënt te parallelliseren.
  • Puppeteer schittert als het gaat om foutopsporing: zet het "headless"-bit op false, voeg "slowMo" toe en je zult zien wat de browser doet. U kunt zelfs Chrome DevTools openen om de testomgeving te inspecteren.

Waarom werkt Puppeteer v.XXX niet met Chromium v.YYY?

Wij zien Puppeteer als een ondeelbare entiteit met Chromium. Elke versie van Puppeteer bundelt een specifieke versie van Chromium – de enige versie waar het gegarandeerd mee werkt.

Dit is geen kunstmatige beperking. Er wordt veel aan Puppeteer gewerkt in de Chromium-repository. Hier is een typisch verhaal:

  1. Er is een poppenspelerbug gemeld
  2. Dit is een probleem met het DevTools-protocol, dus we lossen het op in Chromium
  3. Zodra de upstream-fix is ​​geland, rollen we bijgewerkte Chromium naar Puppeteer

Vaak is het echter wenselijk om Puppeteer te gebruiken met het officiële Google Chrome in plaats van Chromium. Om dit te laten werken, moet je een puppeteer-core versie installeren die overeenkomt met de Chrome-versie.

Als je bijvoorbeeld Chrome 101 met poppenspelerkern wilt aansturen, gebruik je chrome-101 npm-tag:

npm install puppeteer-core@chrome-101

Welke Chromium-versie gebruikt Puppeteer?

Zoek de versie op een van de volgende manieren:

  • Zoek naar de chromium in revisions.ts . Om de bijbehorende Chromium-commit en het versienummer te vinden, zoekt u naar de revisie voorafgegaan door een r in OmahaProxy 's sectie 'Releases zoeken'.
  • Zoek naar de versionsPerRelease inversions.js , die de mapping tussen Chromium- en Puppeteer-versies bevat. Opmerking: het bestand bevat alleen Puppeteer-versies waarin Chromium is bijgewerkt. Niet alle Puppeteer-versies worden vermeld.

Welke Firefox-versie gebruikt Puppeteer?

Omdat Firefox-ondersteuning experimenteel is, downloadt Puppeteer de nieuwste Firefox Nightly wanneer de omgevingsvariabele PUPPETEER_PRODUCT is ingesteld op firefox . Dat is ook de reden waarom de waarde van firefox in revisions.ts latest is: Puppeteer is niet gebonden aan een bepaalde Firefox-versie.

Firefox Nightly ophalen als onderdeel van de Puppeteer-installatie:

PUPPETEER_PRODUCT=firefox npm i puppeteer
# or "yarn add puppeteer"

Wat wordt beschouwd als navigatie?

Vanuit het standpunt van Puppeteer is 'navigatie' alles dat de URL van een pagina verandert. Naast reguliere navigatie waarbij de browser het netwerk bezoekt om een ​​nieuw document van de webserver op te halen, omvat dit ook ankernavigatie en gebruik van de History API .

Met deze definitie van 'navigatie' werkt Puppeteer naadloos met applicaties van één pagina.

Wat is het verschil tussen een 'vertrouwde' en 'niet-vertrouwde' invoergebeurtenis?

In browsers kunnen invoergebeurtenissen in twee grote groepen worden verdeeld: vertrouwd versus niet-vertrouwd.

  • Vertrouwde gebeurtenissen : gebeurtenissen die worden gegenereerd door gebruikers die interactie hebben met de pagina, zoals het gebruik van een muis of toetsenbord.
  • Niet-vertrouwde gebeurtenis : gebeurtenissen die zijn gegenereerd door web-API's, zoals de methoden document.createEvent of element.click() .

Websites kunnen onderscheid maken tussen deze twee groepen:

  • met behulp van een gebeurtenisvlag Event.isTrusted
  • snuffelen voor begeleidende evenementen. Elke vertrouwde 'click' gebeurtenis wordt bijvoorbeeld voorafgegaan door 'mousedown' en 'mouseup' gebeurtenissen.

Voor automatiseringsdoeleinden is het belangrijk om vertrouwde gebeurtenissen te genereren. Alle invoergebeurtenissen die met Puppeteer worden gegenereerd, worden vertrouwd en activeren de juiste begeleidende gebeurtenissen.

Als je om wat voor reden dan ook een niet-vertrouwde gebeurtenis nodig hebt, is het altijd mogelijk om met page.evaluate naar een paginacontext te gaan en een nepgebeurtenis te genereren:

await page.evaluate(() => {
  document.querySelector('button[type=submit]').click();
});

Welke functies ondersteunt Puppeteer niet?

Het kan zijn dat Puppeteer zich niet gedraagt ​​zoals verwacht bij het beheren van pagina's die audio en video bevatten. Het afspelen van video's en schermafbeeldingen zullen bijvoorbeeld waarschijnlijk mislukken .) Daar zijn twee redenen voor:

  • Puppeteer wordt gebundeld met Chromium (niet Chrome). Het neemt dus standaard alle mediagerelateerde beperkingen van Chromium over. Dit betekent dat Puppeteer geen gelicentieerde formaten ondersteunt, zoals AAC of H.264.
    • Het is mogelijk om Puppeteer te dwingen een afzonderlijk geïnstalleerde versie van Chrome te gebruiken in plaats van Chromium met de optie executablePath naar puppeteer.launch . U moet deze configuratie alleen gebruiken als u een officiële versie van Chrome nodig heeft die deze mediaformaten ondersteunt.
  • Omdat Puppeteer (in alle configuraties) een desktopversie van Chromium of Chrome bestuurt, worden functies die alleen worden ondersteund door de mobiele versie van Chrome niet ondersteund. Dit betekent dat Puppeteer HTTP Live Streaming (HLS) niet ondersteunt.

Ik heb problemen met het installeren/uitvoeren van Puppeteer in mijn testomgeving. Waar moet ik hulp zoeken?

We hebben een gids voor probleemoplossing voor verschillende besturingssystemen waarin de vereiste afhankelijkheden worden vermeld.

Chromium wordt gedownload bij elke npm ci -run. Hoe kan ik de download in de cache opslaan?

Het standaard downloadpad is node_modules/puppeteer/.local-chromium . U kunt dat pad echter wijzigen met de omgevingsvariabele PUPPETEER_DOWNLOAD_PATH .

Puppeteer gebruikt die variabele om de uitvoerbare locatie van Chromium tijdens het starten op te lossen, dus u hoeft PUPPETEER_EXECUTABLE_PATH ook niet op te geven.

Om de Chromium-download bijvoorbeeld in ~/.npm/chromium te houden:

export PUPPETEER_DOWNLOAD_PATH=~/.npm/chromium
npm ci

# by default the Chromium executable path is inferred
# from the download path
npm test

# a new run of npm ci will check for the existence of
# Chromium in ~/.npm/chromium
npm ci

Ik heb nog meer vragen! Waar vraag ik het?

Er zijn veel manieren om hulp te krijgen op Puppeteer:

Zorg ervoor dat u deze kanalen doorzoekt voordat u uw vraag plaatst.