A Puppeteer, amely egy nyílt forráskódú csomópont js könyvtár, webkaparó eszközként használható. A parancssor, a Javascript és a HTML DOM-struktúra megértése jó lehet, ha elkezdi ezt a bábos oktatóanyagot. A Series of Puppeteer oktatóanyag az alábbi alrészek között van elosztva, hogy jobban megismerje a Puppeteer-t.
Bábos bemutató
Bábjátékos 1. oktatóanyag: Bábos áttekintése
2. bábos oktatóanyag: Bábos környezeti változók
Bábjátékos 3. oktatóanyag: A Puppeteer Web Scraping és Puppeteer Test Automation áttekintése
Bábjátékos 4. oktatóanyag: Telepítse a Puppeteer programot
Bábjátékos 5. oktatóanyag: Minta bábos projekt
Bábjátékos 6. oktatóanyag: Bábos automatizálási tesztelés
Bábjátékos 7. oktatóanyag: Bábos osztály
Bábjátékos 8. oktatóanyag: Bábos böngésző osztály
Bábjátékos 9. oktatóanyag: Bábos oldal osztály
Ebben a „Bábos osztály” oktatóanyagban elmagyarázzuk az alábbi osztályokat, amelyek magukban foglalják a fontos névtereket (ha vannak), eseményeket (ha vannak), és módszereket, amelyeket gyakran használnak a Puppeteer webkaparási technikáiban.
Ebben a cikkben példákkal magyarázzuk el a fontos összetevőket.
Bábos osztály
Elvileg az osztály egy objektum tervrajza, amely utasításokat (változókat és metódusokat) határoz meg. Itt a Puppeteer osztály Javascript használatával van definiálva, hogy különböző műveleteket hajtson végre a webkaparás végrehajtásához. Nézzük meg az alábbi példát, a Puppeteer osztály modult használták egy Chromium webpéldány elindítására.
const bábszínész = követelmény('bábos'); (async () => { const browserChrome = await puppeteer.launch(); const pageChrome = await browserChrome.newPage(); várjon pageChrome.goto('https://www.google.com'); // Írhatunk az itt leírt lépések böngészőChrome.close(); })();
A Puppeteer osztály több névteret és módszert is biztosít, amelyek támogatják a webkaparási folyamatot. A gyakran használt névtereket és metódusokat a következő szakaszok ismertetik.
Bábos osztály – Névterek:
Ez egy olyan tároló, amely több azonosítót, metódust, változót stb. határoz meg javascriptben. Ez egy módszer a kód logikus és szervezett csoportosítására. Az alábbi névtereket a Puppeteer osztály biztosítja.
bábjátékos.eszközök: Visszaadja a metódus által használható eszközök listáját page.emulate(options) kaparás végrehajtásához mobil eszközökön.
Példa – Google weboldal megnyitása és bezárása mobileszközön –
const bábszínész = követelmény('bábos'); const samsung = bábjátékos.devices['Samsung J5']; (async () => { const browserChrome = await puppeteer.launch(); const pageChrome = await browserChrome.newPage(); await pageChrome.emulate(samsung); várjon pageChrome.goto('https://www.google.com) '); várja a browserChrome.close(); })();
bábjátékos.errors: Különböző bábos módszerekkel való munka közben van esély kivételekre. Leginkább, ha a metódusok nem tudják teljesíteni a kéréseket, akkor hibát dob. Különféle osztályok vannak meghatározva a hibák kezelésére a „puppeteer.errors” névtéren keresztül.
Példa – a page.waitForSelector metódushoz, ha a webelem nem jelenik meg a megadott időn belül, akkor megjelenik az időtúllépési hiba. Kérjük, nézze meg az alábbi példát, amely bemutatja az időtúllépés kezelésének megközelítését,
try { await page.waitForSelector(' '); } catch (err) { if (err instanceof puppeteer.errors.TimeoutError) { // Írjon kódot az időtúllépési hiba kezelésére. } }
puppeteer.networkFeltételek: Visszaadja a hálózati feltételek listáját, amelyek a metódus oldalon használhatók.emulateNetworkConditions(networkConditions). Meg van határozva a hálózati feltételek teljes listája itt.
Példa – Ezen a kódmintán keresztül megnyitjuk a Google weboldalát egy előre meghatározott hálózati feltétellel.
const bábszínész = követelmény('bábos'); const net = puppeteer.networkConditions['Fast 3G']; (async () => { const browserChrome = await puppeteer.launch(); const pageChrome = await browserChrome.newPage(); várjon pageChrome.emulateNetworkConditions(net); várjon pageChrome.goto('https://www.google.com) '); várja a browserChrome.close(); })();
bábjátékos.termék: Az automatizáláshoz használt böngésző nevét adja vissza (Chrome vagy Firefox). A böngésző termékét vagy a PUPPETEER_PRODUCT környezeti változó vagy a bábos osztály metódusában elérhető termékopció állítja be puppeteer.launch([opciók]). Az alapértelmezett érték a Chrome.
Referencia: Kattints itt ha többet szeretne megtudni a Puppeteer Class névterekről.
Bábos osztály – Módszerek:
A metódusok utasításokat tartalmaznak az adott művelet végrehajtásához. A bábos osztálynak az alábbi módszerei vannak,
puppeteer.clearCustomQueryHandlers() – Törli az összes regisztrált kezelőt.
puppeteer.connect(opciók) – Ezzel a módszerrel a bábjátékot bármilyen meglévő böngészőhöz csatlakoztatják. Egy ígéret típusú objektumot ad vissza, amely jelzi az aszinkron folyamat állapotát. Példa – Az alábbi példában a bábjátékos lekapcsolja az aktuális böngészőt, és újra csatlakozik,
const bábszínész = követelmény('bábos'); (async () => { const browserChrome = await pupppeteer.launch(); // Másolja ki a végpont hivatkozást, amely később újracsatlakozik const endpoint = browserChrome.wsEndpoint(); // Bontsa le a bábjátékos böngészőChrome.disconnect() kapcsolatát; // Használja a végpont az újracsatlakozáshoz const browserChrome2 = await puppeteer.connect({endpoint}); // A Chromium második példányának bezárása await browserChrome2.close(); })();
puppeteer.createBrowserFetcher([opciók]) – Létrehoz egy böngésző lekérő objektumot a böngészők különböző verzióinak (Chrome és Firefox) letöltéséhez és kezeléséhez.
const browserFetcher = bábjátékos.createBrowserFetcher();
puppeteer.customQueryHandlerNames() – Egy sor az összes regisztrált egyéni lekérdezéskezelő közül.
puppeteer.defaultArgs([opciók]) – Indításkor tömbként adja vissza a Chrome böngésző alapértelmezett konfigurációs beállításait. Ezenkívül beállíthatjuk a böngésző konfigurálható beállításait az opcionális argumentum opcióval.
const args = bábjátékos.defaultArgs();
puppeteer.executablePath() – Visszaadja azt az elérési utat, amelyet a bábjátékos vár a kötegelt böngészőpéldányhoz. A letöltésben nem elérhető elérési utat a PUPPETEER_SKIP_DOWNLOAD környezeti változó kihagyta. A PUPPETEER_EXECUTABLE_PATH és PUPPETEER_CHROMIUM_REVISION környezeti változókat is használhatjuk az elérési út megváltoztatásához.
const args = pupppeteer.executablePath();
puppeteer.launch([opciók]) – Ez a bábos osztály metódusa a webböngésző elindítására szolgál. Az opcionális argumentumon keresztül átadhatjuk a böngésző különböző konfigurációit, mint például a termék(böngésző neve), headless, devtools stb. Ez a metódus visszaadja az ígéret objektumot, amely az elindított böngésző hivatkozását tartalmazza.
const böngésző = await puppeteer.launch();
puppeteer.registerCustomQueryHandler(név, lekérdezéskezelő) – Egyéni lekérdezéskezelő regisztrálására szolgál. Itt a „name” a lekérdezéskezelő nevét, a „queryHandler” pedig a tényleges egyéni lekérdezéskezelőt határozza meg.
puppeteer.unregisterCustomQueryHandler(név) – Az egyéni lekérdezéskezelők regisztrációjának törlésére szolgál.
Referencia: Kattints itt hogy többet olvashat a Bábos osztály módszereiről.
Célosztály
A célosztály módszereket biztosít a célokkal való munkavégzéshez. A célosztállyal elérhető leggyakrabban használt módszereket a következő részben ismertetjük.
Célcsoport – Módszerek:
Az alábbi módszerek érhetők el a targets osztályban -
- Target.browser() – Visszaadja a célhoz kapcsolódó böngészőobjektumot.
- Target.browserContext() – Egy browserContext típusú objektumot ad vissza, amely a célhoz kapcsolódik.
- Target.createCDPSession() – Létrehozza és visszaadja a chrome devtool protokoll munkamenetét, amely a célhoz van csatolva.
- Target.nyitó() – Visszaadja azt a célpontot, amely megnyitja ezt a célt. Alapvetően ezt a módszert használják a szülő cél megszerzésére. A legfelső szintű cél nullát ad vissza.
- Target.page() – Visszaadja a oldal objektum a cél. Ha a cél típusa nem oldal, akkor null értéket ad vissza.
- Target.type() – A célpont típusának meghatározására szolgál. A visszatérési érték a következő lehetőségek közül választhat: 'background_page' , 'page' , 'shared_worker', 'service_worker', 'browser' vagy 'egyéb'.
- Target.url() – Visszaadja a cél URL-jét.
- Target.worker() – Visszaadja a webworker objektumot. A visszatérési érték nulla, ha a cél nem 'service_worker' és nem 'shared_worker'.
Referencia: Kattints itt hogy többet megtudjon a Target osztály metódusairól.
ConsoleMessage osztály
A ConsoleMessage osztály objektumai oldalanként, a konzoleseményen keresztül kerülnek kiküldésre. A consoleMessage osztály gyakran használt metódusait a következő részben ismertetjük.
ConsoleMessage osztály – Módszerek:
Az alábbi módszerek érhetők el a ConsoleMessage osztályban -
- consoleMessage.args() – JSHandler objektum tömbjét adja vissza. A JSHandler megakadályozza, hogy a csatolt JS-objektum szemetet gyűjtsön, amíg a fogantyút meg nem semmisítik. Ez automatikusan megsemmisül, ha a szülőböngésző kontextus megsemmisül.
- consoleMessage.location() – Az erőforrás egy objektumát adja vissza, amely tartalmazza az alábbi paramétereket.
- url – Az ismert erőforrás URL-jét jelöli. Ha nem ismert, akkor megmarad egy undefined értéket.
- LineNumber – Az erőforrásban elérhető 0-alapú sorszám. Ha nem elérhető, akkor megmarad egy undefined értéket.
- columNumber – Az erőforrásban elérhető 0 alapú oszlopszám. Ha nem elérhető, akkor megmarad egy undefined értéket.
- consoleMessage.stackTrace() – Visszaadja az objektumok listáját (minden objektum egy erőforrásra hivatkozik), amely az alábbi paramétereket tartalmazza.
- url – Az ismert erőforrás URL-jét jelöli. Ha nem ismert, akkor megmarad egy undefined értéket.
- LineNumber – Az erőforrásban elérhető 0-alapú sorszám. Ha nem elérhető, akkor megmarad egy undefined értéket.
- columNumber – Az erőforrásban elérhető 0 alapú oszlopszám. Ha nem elérhető, akkor megmarad egy undefined értéket.
- consoleMessage.text() – Visszaadja a konzol szövegét.
- consoleMessage.type() – A karakterláncot adja vissza a konzolüzenet típusaként. A típus a következő értékek bármelyike lehet: log, debug, info, error, warning, dir, dirxml, table, trace, clear, startGroup, startGroupCollapsed, endGroup, assert, profile, profileEnd, count, timeEnd.
Referencia: Kattints itt ha többet szeretne megtudni a consoleMessage osztály metódusairól.
Timeout Error Class
Különböző bábszínészekkel való munka során előfordulhat kivétel. Leginkább, ha a metódusok nem tudják teljesíteni a kéréseket, akkor hibát dob. A TimeoutError osztály az ilyen kivételek kezelésére szolgál.
Példa a TimeoutError osztályra – a page.waitForSelector metódushoz, ha a webelem nem jelenik meg a megadott időn belül, akkor megjelenik az időtúllépési hiba. Kérjük, nézze meg az alábbi példát, amely bemutatja az időtúllépés kezelésének megközelítését,
try { await page.waitForSelector(' '); } catch (e) { if (e instanceof puppeteer.errors.TimeoutError) { // Írjon kódot a hiba kezelésére. } }
FileChooser osztály
A fájlválasztó osztály objektum a metódus segítségével jön létre page.waitForFileChooser. A FileChooser osztály a fájlokkal való interakcióra szolgál. A FileChooser osztály gyakran használt metódusait a következő részben ismertetjük.
FileChooser osztály – Módszerek:
Az alábbi módszerek állnak rendelkezésre a FileChooser osztályhoz -
- fileChooser.accept(fájl_útvonallal) – Ezzel a módszerrel bármilyen fájl feltölthető (amelyhez az elérési út argumentumként van megadva).
- fileChooser.cancel() – Ez a módszer a fájlfeltöltési folyamat megszakítására szolgál.
- fileChooser.isMultiple() – Ez a módszer ellenőrzi, hogy a fileChooser engedélyezi-e több érték kiválasztását. Logikai kifejezést ad vissza (igaz vagy hamis).
Példa a FileChooser osztályra -
const [fileChooser] = await Promise.all([ page.waitForFileChooser(), page.click('#attach-button'), ]); várja fileChooser.accept(['/puppeteer_proj/data/sample_file.pdf']);
Következtetés:
Ebben a „Puppeteer osztály” oktatóanyagban elmagyaráztuk a Puppeteer osztályt, a Target osztályt, a MessageConsole osztályt és a TimeoutError osztályt, amelyek tartalmazzák a fontos névtereket (ha vannak), eseményeket (ha vannak), és módszereket, amelyeket gyakran használnak a Puppeteer webkaparási technikáiban. példákkal. A következő cikkben elmagyarázzuk a BrowserContext-et, a Browser-t és a BrowserContext osztályt.