オープンソースのノードjsライブラリであるPuppeteerは、Webスクレイピングツールとして使用できます。 このpuppeteerチュートリアルから始めるには、コマンドライン、Javascript、およびHTMLDOM構造を理解しておくとよいでしょう。 Puppeteerのシリーズのチュートリアルは、Puppeteerをしっかりと把握するために、以下のサブセクションに配布されています。
Puppeteerチュートリアル
Puppeteerチュートリアル#2: Puppeteer環境変数
人形 チュートリアル#3: PuppeteerWebスクレイピングとPuppeteerテスト自動化の概要
人形 チュートリアル#4: Puppeteerをインストールします
人形 チュートリアル#5: サンプルパペッティアプロジェクト
人形 チュートリアル#6: Puppeteer自動化テスト
人形 チュートリアル#7: パペッティアクラス
人形 チュートリアル#8: Puppeteerブラウザクラス
人形 チュートリアル#9:Puppeteerページクラス
この「Puppeteerクラス」チュートリアルでは、重要な名前空間(存在する場合)、イベント(存在する場合)、およびPuppeteerWebスクレイピング手法で頻繁に使用されるメソッドを含む以下のクラスについて説明します。
この記事では、重要なコンポーネントを例を挙げて説明します。
パペッティアクラス
概念的には、クラスは一連の命令(変数とメソッド)を定義するオブジェクトの青写真です。 ここで、Puppeteerクラスは、JavaScriptを使用して定義され、さまざまなアクションを実行してWebスクレイピングを実行します。 以下の例を確認してみましょう。Puppeteerクラスモジュールは、ChromiumWebインスタンスを起動するために使用されています。
const puppeteer = require('puppeteer'); (async()=> {const browserChrome = await puppeteer.launch(); const pageChrome = await browserChrome.newPage(); await pageChrome.goto('https://www.google.com');//次のように記述できますここでの手順はbrowserChrome.close();})();を待ちます
Puppeteerクラスは、Webスクレイピングプロセスをサポートする複数の名前空間とメソッドも提供します。 頻繁に使用される名前空間とメソッドについては、次のセクションで説明します。
Puppeteerクラス–名前空間:
これは、JavaScriptで複数の識別子、メソッド、変数などを定義するコンテナです。 これは、論理的かつ体系的な方法でコードをグループ化する方法です。 以下の名前空間は、Puppeteerクラスによって提供されます。
puppeteer.devices: メソッドで使用できるデバイスのリストを返します page.emulate(options) モバイルデバイスでスクレイピングを実行します。
例–モバイルデバイスでGoogle Webページを開いたり閉じたりします–
const puppeteer = require('puppeteer'); const samsung = puppeteer.devices ['Samsung J5']; (async()=> {const browserChrome = await puppeteer.launch(); const pageChrome = await browserChrome.newPage(); await pageChrome.emulate(samsung); await pageChrome.goto('https://www.google.com '); await browserChrome.close();})();
puppeteer.errors: さまざまなパペッティアメソッドを使用している間、例外が発生する可能性があります。 ほとんどの場合、メソッドが要求を満たすことができない場合、エラーがスローされます。 'puppeteer.errors'名前空間を介してエラーを処理するために定義されたさまざまなクラスがあります。
例–メソッドpage.waitForSelectorの場合、指定された時間内にWeb要素が表示されない場合、タイムアウトエラーが表示されます。 タイムアウトを処理する方法を示す以下の例を実行してください。
{await page.waitForSelector( ' '); } catch(err){if(err instanceof puppeteer.errors.TimeoutError){//タイムアウトエラーを処理するコードを記述します。 }}
puppeteer.networkConditions: メソッドpage.emulateNetworkConditions(networkConditions)で使用できるネットワーク条件のリストを返します。 ネットワーク状態の完全なリストが定義されています (詳細を見る)。.
例–このコードサンプルを通じて、事前定義されたネットワーク条件を使用してGoogleWebページを開きます。
const puppeteer = require('puppeteer'); const net = puppeteer.networkConditions ['Fast 3G']; (async()=> {const browserChrome = await puppeteer.launch(); const pageChrome = await browserChrome.newPage(); await pageChrome.emulateNetworkConditions(net); await pageChrome.goto('https://www.google.com '); await browserChrome.close();})();
puppeteer.product: 自動化に使用されるブラウザの名前を返します(ChromeまたはFirefox)。 ブラウザの製品は、環境変数PUPPETEER_PRODUCTまたはpuppeteerクラスメソッドで使用可能な製品オプションのいずれかによって設定されます。 puppeteer.launch([options])。 デフォルト値はChromeです。
参照: 【送信】ボタンをクリックします。販売者は原則としてXNUMX日以内に回答を返信します。XNUMX日を過ぎても回答がない場合は、Artisanaryまでお問い合わせください。 (詳細を見る)。 Puppeteerクラスの名前空間の詳細については。
Puppeteerクラス–メソッド:
メソッドには、特定のアクションを実行するためのステートメントが含まれています。 puppeteerクラスには以下のメソッドがあります。
puppeteer.clearCustomQueryHandlers() –登録されているすべてのハンドラーをクリアします。
puppeteer.connect(options) –この方法は、puppeteerを既存のブラウザーに接続するために使用されます。 この非同期プロセスのステータスを示すpromise型のオブジェクトを返します。 例–以下の例では、puppeteerは現在のブラウザーから切断して再接続し、
const puppeteer = require('puppeteer'); (async()=> {const browserChrome = await puppeteer.launch();//後で再接続されるエンドポイント参照をコピーしますconstendpoint = browserChrome.wsEndpoint(); // puppeteer browserChrome.disconnect();//を使用します再接続するエンドポイントconstbrowserChrome2= await puppeteer.connect({endpoint}); //Chromiumの2番目のインスタンスを閉じますawaitbrowserChromeXNUMX.close();})();
puppeteer.createBrowserFetcher([options]) –さまざまなバージョンのブラウザー(ChromeおよびFirefox)をダウンロードして管理するためのブラウザーフェッチャーオブジェクトを作成します。
const browserFetcher = puppeteer.createBrowserFetcher();
puppeteer.customQueryHandlerNames()–それは 配列 登録されているすべてのカスタムクエリハンドラーの
puppeteer.defaultArgs([options]) –起動時にChromeブラウザのデフォルト設定オプションを配列として返します。 また、オプションの引数オプションを使用して、ブラウザーの構成可能なオプションを設定できます。
const args = puppeteer.defaultArgs();
puppeteer.executablePath() –バンドルされたブラウザインスタンスのパペッティアが期待するパスを返します。 ダウンロードで利用できないパスは、環境変数PUPPETEER_SKIP_DOWNLOADによってスキップされました。 また、環境変数PUPPETEER_EXECUTABLE_PATHおよびPUPPETEER_CHROMIUM_REVISIONを使用してパスを変更することもできます。
const args = puppeteer.executablePath();
puppeteer.launch([options])– このpuppeteerクラスのメソッドは、Webブラウザを起動するために使用されます。 オプションの引数を使用して、product(ブラウザー名)、ヘッドレス、devtoolsなど、ブラウザーのさまざまな構成を渡すことができます。このメソッドは、起動されたブラウザーの参照を保持するpromiseオブジェクトを返します。
const browser = await puppeteer.launch();
puppeteer.registerCustomQueryHandler(name、queryHandler) –カスタムクエリハンドラーを登録するために使用されます。 ここで、「name」はクエリハンドラの名前を提供し、「queryHandler」は実際のカスタムクエリハンドラを定義します。
puppeteer.unregisterCustomQueryHandler(name) –カスタムクエリハンドラーの登録を解除するために使用されます。
参照: 【送信】ボタンをクリックします。販売者は原則としてXNUMX日以内に回答を返信します。XNUMX日を過ぎても回答がない場合は、Artisanaryまでお問い合わせください。 (詳細を見る)。 PuppeteerClassメソッドの詳細を読む。
ターゲットクラス
ターゲットクラスは、ターゲットを操作するためのメソッドを提供します。 次のセクションでは、ターゲットクラスで使用できる最も頻繁に使用されるメソッドについて説明します。
ターゲットクラス–メソッド:
以下のメソッドは、ターゲットクラスで使用できます–
- Target.browser() –ターゲットにリンクされているブラウザオブジェクトを返します。
- Target.browserContext() –ターゲットにリンクされているbrowserContextタイプのオブジェクトを返します。
- Target.createCDPSession() –ターゲットに接続されているchromeのdevtoolプロトコルセッションを作成して返します。
- Target.opener() –このターゲットを開くターゲットを返します。 基本的に、このメソッドは親ターゲットを取得するために使用されます。 トップレベルのターゲットに対してはnullを返します。
- Target.page()–それは ページオブジェクト ターゲットの。 ターゲットのタイプがページでない場合は、null値を返します。
- Target.type() –ターゲットのタイプを取得するために使用されます。 戻り値は、「background_page」、「page」、「shared_worker」、「service_worker」、「browser」、または「other」のいずれかのオプションにすることができます。
- Target.url() –ターゲットのURLを返します。
- Target.worker() –webworkerオブジェクトを返します。 ターゲットが「service_worker」でも「shared_worker」でもない場合、戻り値はnullです。
参照: 【送信】ボタンをクリックします。販売者は原則としてXNUMX日以内に回答を返信します。XNUMX日を過ぎても回答がない場合は、Artisanaryまでお問い合わせください。 (詳細を見る)。 Targetクラスのメソッドの詳細を読む。
ConsoleMessageクラス
ConsoleMessageクラスオブジェクトは、コンソールイベントを介してページごとにディスパッチされます。 consoleMessageクラスの頻繁に使用されるメソッドについては、次のセクションで説明します。
ConsoleMessageクラス–メソッド:
以下のメソッドは、ConsoleMessageクラスで使用できます–
- consoleMessage.args() –JSHandlerオブジェクトの配列を返します。 JSHandlerは、ハンドルが破棄されるまで、リンクされたJSオブジェクトがガベージコレクションされるのを防ぎます。 親ブラウザのコンテキストが破棄されると、自動的に破棄されます。
- consoleMessage.location() –以下のパラメーターを含むリソースのオブジェクトを返します。
- url –既知のリソースのURLを示します。 知られていない場合、それは維持されます 未定義 値。
- LineNumber –リソースで使用できる0ベースの行番号です。 利用できない場合は、 未定義 値。
- columNumber –リソースで使用できるのは0から始まる列番号です。 利用できない場合は、 未定義 値。
- consoleMessage.stackTrace() –以下のパラメーターを含むオブジェクトのリスト(各オブジェクトはリソースを参照します)を返します。
- url –既知のリソースのURLを示します。 知られていない場合、それは維持されます 未定義 値。
- LineNumber –リソースで使用できる0ベースの行番号です。 利用できない場合は、 未定義 値。
- columNumber –リソースで使用できるのは0から始まる列番号です。 利用できない場合は、 未定義 値。
- consoleMessage.text() –コンソールのテキストを返します。
- consoleMessage.type() –コンソールメッセージのタイプとして文字列を返します。 タイプは、log、debug、info、error、warning、dir、dirxml、table、trace、clear、startGroup、startGroupCollapsed、endGroup、assert、profile、profileEnd、count、timeEndのいずれかの値になります。
参照: 【送信】ボタンをクリックします。販売者は原則としてXNUMX日以内に回答を返信します。XNUMX日を過ぎても回答がない場合は、Artisanaryまでお問い合わせください。 (詳細を見る)。 consoleMessageクラスメソッドの詳細については。
TimeoutErrorクラス
別の人形遣いで作業している間、例外の可能性があります。 ほとんどの場合、メソッドが要求を満たすことができない場合、エラーがスローされます。 TimeoutErrorクラスは、この種の例外を処理するために使用されます。
TimeoutErrorクラスの例–メソッドpage.waitForSelectorの場合、指定された時間内にWeb要素が表示されない場合、タイムアウトエラーが表示されます。 タイムアウトを処理する方法を示す以下の例を実行してください。
{await page.waitForSelector( ' '); } catch(e){if(e instanceof puppeteer.errors.TimeoutError){//エラーを処理するコードを記述します。 }}
FileChooserクラス
ファイルチューザクラスオブジェクトは、メソッドを使用して作成されます page.waitForFileChooser。 FileChooserクラスは、ファイルを操作するために使用されます。 FileChooserクラスの頻繁に使用されるメソッドについては、次のセクションで説明します。
FileChooserクラス–メソッド:
FileChooserクラスでは以下のメソッドを使用できます–
- fileChooser.accept(file_with_path) –このメソッドは、任意のファイル(パスが引数として指定されている)をアップロードするために使用されます。
- fileChooser.cancel() –このメソッドは、ファイルのアップロードプロセスをキャンセルするために使用されます。
- fileChooser.isMultiple() –このメソッドは、fileChooserが複数の値を選択できるかどうかをチェックします。 ブール式(trueまたはfalse)を返します。
FileChooserクラスの例–
const [fileChooser] = await Promise.all([page.waitForFileChooser()、page.click('#attach-button')、]); fileChooser.accept(['/puppeteer_proj/data/sample_file.pdf']);を待つ
結論:
この「Puppeteerクラス」チュートリアルでは、Puppeteerクラス、Targetクラス、MessageConsoleクラス、TimeoutErrorクラスについて説明しました。これらのクラスには、重要な名前空間(存在する場合)、イベント(存在する場合)、およびPuppeteerWebスクレイピング手法で頻繁に使用されるメソッドが含まれています。例を挙げて。 次の記事では、BrowserContext、Browser、およびBrowserContextクラスについて説明します。