コマンドラインアプリケーション:文字通りPeopeteerで
導入
私のinvoicemakerアプリケーションのために、私は使用しましたPuppeteer PDFを生成するには私は非常にツールのシンプルさを楽しんで、いくつかのあなたはPuppeteerで行うことができます多くのことを紹介するには、私は少しアプリケーションを作ると思いました.
どのような人形を行うことができますか?
Github ReadMeによると、ここでは、Philpeteerがあなたを助けることができるもののいくつかがあります:
Puppeteerは簡単にウェブをscrapeにするツールです.これはChromeブラウザのヘッドレスインスタンスです.ウェブスクレーピングは、ウェブサイトを参照し、それからデータを抽出することを意味します.
何をビルドする
したがって、我々は少しコマンドラインアプリケーションを構築する予定です.この記事では、次の2つのことができます.
セットアップ
そこで、CLIの削り落としと呼ばれるフォルダーを作りましょう.その中には、糸のinit (またはnpm initを実行しますが、ここで糸を使います).デフォルトを受け入れ、インデックスを作成します.jsファイル.それから、糸を走らせてください.最後に、CLIの削りの中に2つのフォルダを作成します:スクリーンショットのユーザーとPDFファイル.コーディングしましょう.
コマンドライン引数の取得
我々は、プロセスを使用します.argvで指定した引数を得る.少なくとも2つの要素で配列を返します.試してみましょう
console.log(process.argv)
走るときnode index.js
, コンソールに入ります.[ '/usr/local/Cellar/node/11.4.0/bin/node',
'/Users/Damien/Desktop/javascript/scraping/index.js' ]
別の結果を得るが、2つの要素を取得します.最初のものは使用されるランタイムです(ここでノードv 11.4.0)、2番目はスクリプトのパスです.それで、私たちが与えるすべての議論はプロセスで始まります.argv [ 2 ]私が走るならばnode index.js blabla
, プロセス.argv [ 2 ]は2になりますblabla
. よろしいですか.ニースと簡単.それで、今私たちはどのように引数を取得するかを知っています.人形師に移りましょう.スクリーンショットの生成
スクリーンショットを生成するには、次のコードを使用します.
(async () => {
// Launching an instance of a headless Chrome browser
const browser = await puppeteer.launch()
// Create a new page
const page = await browser.newPage()
// Move to the specified url
await page.goto('urlToThePage')
// Take a screenshot and save it at the specified path
await page.screenshot({ path: 'screenshot.png' })
// Close the browser
await browser.close()
}
ので、何をする必要がありますか?const puppeteer = require('puppeteer')
const getScreenshot = async username => {
const browser = await puppeteer.launch()
const page = await browser.newPage()
await page.goto(`https://dev.to/${username}`)
await page.screenshot({ path: `screenshots-users/${username}.png`, fullPage: true })
await browser.close()
}
switch (process.argv[2]) {
case 'getScreen':
getScreenshot(process.argv[3])
break
default:
console.log('Wrong argument!')
}
まず、私たちは人形職人をインポートします.それから、私たちはスクリーンショットを生成するのを気にするGetGetScreen機能を作成します.関数のスケルトンが以前に見られました.いくつかの変更点に注意してください.ページ.後藤は適切なdevを取るユーザーの名前をURLに.
ページ.スクリーンショットは、ファイル名としてユーザー名を持つスクリーンショットのフォルダにPNGファイルを置きます.フルページに注意してください.
グレート、今私は走ることができる
node index.js getScreen damcosset
私のプロファイルのスクリーンショットを取得します.そして、スクリーンショットのユーザーのフォルダのスクリーンショットを見ることができます.PNG :注:私はスペースを節約するためにスクリーンショットを切断していますが、スクリーン全体がスクリーンショットで利用可能です
さあ走りましょう
node index.js getScreen ben
そして、ベンと呼ばれるフォルダの以下のスクリーンショットを得ます.PNG :PDFの生成
これには3つの異なるステップがあります.
1 -ユーザーの個人ページに移動します
2 -彼女はそこに移動するために書いた最後の記事をクリックして
3 -私たちのPDFの名前が一意であることを確認する属性を取得します
4 - PDFを生成する
GetPDFという関数を作りましょう.内部のコードは次のようになります.
const getPDF = async username => {
const browser = await puppeteer.launch()
const page = await browser.newPage()
await page.goto(`https://dev.to/${username}`)
await Promise.all([page.waitForNavigation(), page.click('.single-article')])
const dataPath = await page.evaluate(() =>
document.querySelector('.article').getAttribute('data-path')
)
await page.pdf({ path: `pdfs/${dataPath.split('/')[2]}.pdf` })
await browser.close()
}
最初の3行は常に同じ、開始、新しいページ、gotoです.それでは約束がある.すべて.ここで2つのアクションを待っています.これはそのセレクタで最初の要素を対象とします.そして、dev . toがあなたの新しい記事を最初に提示するので、これはまさに私が探していたものです.
次に、HTML構造を勉強したとき、各記事が記事のクラスでDIVに含まれているのを見ました.この要素はデータパス属性を持ちます.ページを使用します.評価すると、このノードを取得してこの属性を取得できます.これは、我々のPDFを保存するとき、衝突が全くないと保証します.
最後にページを呼びます.PDFとオプションのパスを渡します.検索したデータパスは、
/username/title-article-000
それで、私はちょうど最後の部分を得るためにそれを分けました.最後に、switch文にケースを追加することを忘れないでください.
switch (process.argv[2]) {
case 'getScreen':
getScreenshot(process.argv[3])
break
case 'getPDF':
getPDF(process.argv[3])
break
default:
console.log('Wrong argument!')
}
完了!さて、次のコマンドを実行できます.node index.js getPDF damcosset
node index.js getPDF ben
node index.js getPDF jess
したがって、これはヘッドレスクロムブラウザのインスタンスを作成し、私のページに移動し、私が書いた最後の記事をクリックし、そのページに移動し、そのページのコンテンツをPDFを作成します.閉じるこの動画はお気に入りから削除されています.それで、今私はPDFSフォルダに3つのPDFを持っています.
start-before-you-are-ready-393e.pdf (Mine)
what-advice-would-you-give-someone-looking-to-use-their-keyboard-more-and-their-mouse-less-1lea.pdf (Ben)
what-was-your-win-this-week-3a9k.pdf (Jess)
タナヤサウナ!コードが見つかるhere .
結論
ので、これは最初の部分のためです.操り人形は、このような楽しいツールを再生すると、私は戻って戻ってくることを確認します驚くべきことを私たちはそれを行うことができます.
楽しんでください
Reference
この問題について(コマンドラインアプリケーション:文字通りPeopeteerで), 我々は、より多くの情報をここで見つけました
https://dev.to/damcosset/a-command-line-application-scraping-dev-to-with-puppeteer-149k
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Reference
この問題について(コマンドラインアプリケーション:文字通りPeopeteerで), 我々は、より多くの情報をここで見つけました https://dev.to/damcosset/a-command-line-application-scraping-dev-to-with-puppeteer-149kテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol