Najczęstsze pytania

Jaki jest stan obsługi różnych przeglądarek?

Oficjalna obsługa przeglądarki Firefox ma charakter eksperymentalny. Stała współpraca z Mozilli ma na celu umożliwienie obsługi typowych, kompleksowych testów, w których deweloperzy spodziewają się, że będą obejmowały różne przeglądarki. Zespół Puppeteer potrzebuje opinii użytkowników, aby ustabilizować obsługę Firefoksa i zwrócić naszą uwagę na brakujące interfejsy API.

Od Puppeteer w wersji 2.1.0 możesz określić, czy puppeteer.launch({product: 'firefox'}) będzie uruchamiać skrypty Puppeteer w Firefoksie Nightly bez żadnych dodatkowych
niestandardowych poprawek. W przypadku starszego eksperymentu wymagana była poprawka wersji Firefoksa, natomiast w przypadku tej przeglądarki obecnie działa „stock”.

Cały czas współpracujemy z innymi dostawcami przeglądarek, aby zapewniać obsługę Puppeteer w przeglądarkach takich jak Safari. Obejmuje to poznanie standardu wykonywania poleceń w różnych przeglądarkach (zamiast korzystania z niestandardowego protokołu Narzędzi deweloperskich w Chrome).

Jakie są cele i zasady stworzone przez Puppeteer?

Cele tego projektu:

  • Udostępnij niewielką, kanoniczną bibliotekę, w której opisujemy możliwości protokołu DevTools.
  • Podaj implementację referencyjną dla podobnych bibliotek testowych. W końcu inne platformy mogą wdrożyć Puppeteer jako podstawową warstwę.
  • Zwiększyć popularność testów przeglądarki bez interfejsu graficznego/automatycznego.
  • Pomóż testować nowe funkcje protokołu DevTools i wykrywać błędy.
  • Dowiedz się więcej o problemach związanych z automatycznymi testami przeglądarek i o tym, jak je wypełnić.

Modyfikujemy zasady Chromium, aby pomagać w podejmowaniu decyzji dotyczących usług:

  • Szybkość: Puppeteer ma prawie zerowy narzut na skuteczność strony zautomatyzowanej.
  • Bezpieczeństwo: Puppeteer działa poza procesem w ramach Chromium, dzięki czemu można bezpiecznie zautomatyzować potencjalnie szkodliwe strony.
  • Stabilność: aplikacja Puppeteer nie powinna być niestabilna i nie może wyciekać pamięci.
  • Prostota: Puppeteer udostępnia interfejs API wysokiego poziomu, który jest łatwy w użyciu, rozumieniu i debugowaniu.

Czy Puppeteer zastępuje Selenium/WebDriver?

Nie. Oba projekty są wartościowe z różnych powodów:

  • Selenium/WebDriver skupia się na automatyzacji w różnych przeglądarkach. Jej propozycja wartości to pojedynczy standardowy interfejs API, który działa we wszystkich popularnych przeglądarkach.
  • Puppeteer skupia się na Chromium. Jego zaletą są większe możliwości i większa niezawodność.

Jednak możeszużywać Puppeteer do wykonywania testów w Chromium, np. w prowadzonym przez społeczność jest-puppeteer. Prawdopodobnie nie jest to jedyne rozwiązanie testowe, ale ma ono kilka dobrych punktów w porównaniu z funkcją WebDriver:

  • Puppeteer wymaga zerowej konfiguracji. Jest dostarczany z wersją Chromium, z którą działa najlepiej. Lepiej wykonać kilka testów tylko w Chromium, niż nie robić żadnych testów.
  • Puppeteer ma architekturę opartą na zdarzeniach, dzięki czemu można wyeliminować znaczną część potencjalnych niestabilności. W scenach lalkowych nie trzeba krzywdzić języka „sen(1000)”.
  • Puppeteer działa domyślnie bez interfejsu graficznego, dzięki czemu biega szybko. Puppeteer w wersji 1.5.0 udostępnia również konteksty przeglądarki, co umożliwia sprawne paraliżowanie wykonywania testów.
  • Puppeteer sprawdza się w debugowaniu: zmień wartość „bez interfejsu graficznego” na „false” (fałsz), dodaj „slowMo” i zobacz, co robi przeglądarka. Możesz nawet otworzyć Narzędzia deweloperskie w Chrome, aby zbadać środowisko testowe.

Dlaczego Puppeteer v.XXX nie współpracuje z Chromium v.YYY?

Puppeteer to w Chromium niepodzielny podmiot. Każda wersja Puppeteer zawiera konkretną wersję Chromium – jedyną wersję, z którą będzie współpracować.

To nie jest sztuczne ograniczenie. Wiele pracy w Puppeteer wykonuje się w repozytorium Chromium. Oto typowa historia:

  1. Zgłoszono błąd Lalkarza
  2. Jest to problem z protokołem DevTools, więc naprawiamy go w Chromium
  3. Po rozwiązaniu problemu z rozpowszechnianiem zaktualizuj Chromium w Puppeteer.

Jednak często lepiej jest używać Puppeteer w oficjalnej wersji Google Chrome, a nie Chromium. Aby to działało, musisz zainstalować wersję puppeteer-core zgodną z wersją Chrome.

Aby na przykład uruchomić Chrome 101 przy użyciu mechanizmu-core-puppeteer, użyj tagu chrome-101npm:

npm install puppeteer-core@chrome-101

Której wersji Chromium używa Puppeteer?

Znajdź wersję na jeden z tych sposobów:

  • Poszukaj wpisu chromium w revisions.ts. Aby znaleźć odpowiednie zatwierdzenie zatwierdzenia i numer wersji Chromium, wyszukaj wersję poprzedzoną znakiem r w sekcji „Znajdź wersje” OmahaProxy.
  • Odszukaj mapę versionsPerRelease w pliku versions.js, który zawiera mapowanie między wersjami Chromium i Puppeteer. Uwaga: plik zawiera tylko wersje Puppeteer, w których aktualizowana jest wersja Chromium. Nie wszystkie wersje Puppeteer są wymienione.

Której wersji przeglądarki Firefox używa Puppeteer?

Obsługa przeglądarki Firefox jest eksperymentalna, dlatego Puppeteer pobiera najnowszą wersję Firefox Nightly, gdy zmienna środowiskowa PUPPETEER_PRODUCT ma wartość firefox. Z tego właśnie powodu wartość firefox w pliku revisions.ts wynosi latest – Puppeteer nie jest powiązana z konkretną wersją Firefoksa.

Aby pobrać Firefox Nightly w ramach instalacji Puppeteer:

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

Jak nazywa się nawigacja?

Z punktu widzenia firmy Puppeteer „nawigacja” to wszystko, co zmienia adres URL strony. Oprócz standardowej nawigacji, podczas której przeglądarka przechodzi do sieci w celu pobrania nowego dokumentu z serwera WWW, obejmuje to kotwice nawigacyjne i wykorzystanie interfejsu History API.

Dzięki tej definicji „nawigacji” Puppeteer płynnie współpracuje z aplikacjami jednostronicowymi.

Jaka jest różnica między zdarzeniami wejściowymi „Zaufane” i „Niezaufane”?

W przeglądarkach zdarzenia wejściowe można podzielić na 2 duże grupy: zaufane i niezaufane.

  • Zaufane zdarzenia: zdarzenia generowane przez użytkowników korzystających ze strony, np. korzystających z myszy lub klawiatury.
  • Niezaufane zdarzenie: zdarzenia generowane przez internetowe interfejsy API, takie jak metody document.createEvent czy element.click().

Witryny mogą rozróżniać te 2 grupy:

  • używając flagi zdarzenia Event.isTrusted.
  • wychwytywanie towarzyszących wydarzeń. Na przykład każde zaufane zdarzenie 'click' jest poprzedzone zdarzeniami 'mousedown' i 'mouseup'.

Na potrzeby automatyzacji ważne jest generowanie zaufanych zdarzeń. Wszystkie zdarzenia wejściowe generowane za pomocą Puppeteer są zaufane i wywołują odpowiednie zdarzenia towarzyszące.

Jeśli z jakiegoś powodu potrzebujesz niezaufanego zdarzenia, zawsze możesz przejść do kontekstu strony za pomocą parametru page.evaluate i wygenerować fałszywe zdarzenie:

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

Których funkcji nie obsługuje Puppeteer?

Podczas kontroli stron, które zawierają dźwięk i obraz, Puppeteer może nie działać zgodnie z oczekiwaniami. Może to na przykład spowodować błędy w przypadku odtwarzania filmów i wykonywania zrzutów ekranu. Dzieje się tak z dwóch powodów:

  • Puppeteer jest połączony z Chromium (nie Chrome). Domyślnie dziedziczy więc wszystkie ograniczenia dotyczące multimediów w Chromium. Oznacza to, że aplikacja Puppeteer nie obsługuje licencjonowanych formatów, takich jak AAC czy H.264.
    • Istnieje możliwość wymuszenia użycia przez Puppeteer osobnej wersji Chrome zamiast Chromium za pomocą opcji executablePath do puppeteer.launch. Tej konfiguracji należy używać tylko wtedy, gdy potrzebujesz oficjalnej wersji Chrome, która obsługuje te formaty multimediów.
  • Puppeteer (we wszystkich konfiguracjach) kontroluje komputerową wersję Chromium lub Chrome, więc funkcje obsługiwane tylko przez mobilną wersję Chrome nie są obsługiwane. Oznacza to, że Puppeteer nie obsługuje transmisji na żywo przez HTTP (HLS).

Mam problem z instalacją lub uruchomieniem Puppeteer w środowisku testowym. Gdzie mogę znaleźć pomoc?

Opracowaliśmy przewodnik dotyczący rozwiązywania problemów dotyczący różnych systemów operacyjnych, który zawiera listę wymaganych zależności.

Przeglądarka Chromium jest pobierana przy każdym uruchomieniu npm ci. Jak mogę zapisać pobieranie w pamięci podręcznej?

Domyślna ścieżka pobierania to node_modules/puppeteer/.local-chromium. Możesz jednak zmienić tę ścieżkę za pomocą zmiennej środowiskowej PUPPETEER_DOWNLOAD_PATH.

Puppeteer wykorzystuje tę zmienną do znajdowania lokalizacji pliku wykonywalnego Chromium podczas uruchamiania, więc nie musisz też podawać PUPPETEER_EXECUTABLE_PATH.

Aby na przykład pobrać Chromium w języku: ~/.npm/chromium:

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

Mam więcej pytań. Gdzie mogę zapytać?

Pomoc w aplikacji Puppeteer możesz uzyskać na wiele sposobów:

Zanim opublikujesz pytanie, przeszukaj te kanały.