この記事には、多くの歌詞、結婚または入門的な理由が含まれる必要はありません。
一言で言えば:
1.パッケージを使用して、サイトをテストできます。
2.このパッケージは、データの解析に使用できます。
3.パッケージを使用して、サイトでのデータ入力を自動化できます。
代替案:
Casper.js、phantom.js、watir、その他多数、googleはすべての人でいっぱいです。 nightmare.jsを使用する理由:
- 使いやすさ。
- html5の完全サポート、サイトとの競合なし。
- アクションを通じて拡張可能。
ライブラリー構造
Nightmareクラスはelectronフレームワークを使用して、Chromiumシェルブラウザーを起動する各ページのオブジェクト(BrowserWindow)を作成します。
動作原理
- Nightmareは、さらに処理する必要がある開始ページで新しい電子アプリケーションを初期化します。
- 調査対象のページをロードする前に、一連のエミッターを介してプログラマーとページ間の双方向の対話をサポートできるスクリプトがロードされます。
- Nightmareは、プログラマーに一連のapi(一連のアクション)を提供します。これにより、サイトを操作して必要なデータを取得できます。
長所
- クライアント側とサイトのコードは1つの言語で書かれており、テンプレートエンジンは必要ありません。
- アクションの作成を通じてモジュールを使用して拡張する機能。 アクションは、悪夢のクラスレベル、または悪夢のクラスレベルと電子レベルで作成できます(これにより、devapi Chromiumを使用できるようになります)。 npmには、プロジェクトに接続できる既製の拡張モジュールがすでに十分にあります(たとえば、realMouseは、マウスのホバリングまたはフレームの操作を完全にエミュレートしますが、ブラウザのセキュリティによってブロックされます)。
- すべてのコマンドはチェーンであり、それぞれがプロミスを返します。これにより、プロミスのスタイルと非同期関数またはジェネレーター内の両方でコードを記述できます。
- プロセッサとメモリの負荷が比較的小さいため、このようなツールを単純なgetおよびpostリクエストと比較することは倫理的ではなく、ブラウザパーサーはオプションなしで速度とメモリを失うことに注意してください。
- ナイトメアは、ブラウザ表示モードとバックグラウンドプロセスモードの2つのモードで使用できます。
- プロキシをサポートします。 ユーザーエージェントをインストールし、ブラウザー拡張機能を設定します。
- 画像表示、webGLサポートなどを有効または無効にすることができます。
- プリロードスクリプトを作成できます。これにより、ロードする前にページに関数とライブラリを追加できます。 特定の例として、addEventListener関数を書き換えて、実際の関数のデコレーターに+分析関数を挿入して、それを検証できます。 このサイトは、あなたが「匿名」を忘れて誰もが大好きな指紋の強迫観念に苦しんでいるときに本当に何をしますか。
感情から行動へ
ドキュメントのモジュールを使用する典型的な例:
var Nightmare = require('nightmare');
var nightmare = Nightmare({ show: true });
nightmare
.goto('https://duckduckgo.com')
.type('#search_form_input_homepage', 'github nightmare')
.click('#search_button_homepage')
.wait('#zero_click_wrapper .c-info__title a')
.evaluate(function () {
return document.querySelector('#zero_click_wrapper .c-info__title a').href;
})
.end()
.then(function (result) {
console.log(result);
})
.catch(function (error) {
console.error('Search failed:', error);
});
, . , , , , , , then . , , , :
const Nightmare = require('nightmare');
(async ()=>{
let nightmare;
try {
nightmare = Nightmare({ show: true });
await nightmare
.goto('https://duckduckgo.com')
.type('#search_form_input_homepage', 'github nightmare')
.click('#search_button_homepage')
.wait('#zero_click_wrapper .c-info__title a');
let siteData = await nightmare.evaluate(function () {
return document.querySelector('#zero_click_wrapper .c-info__title a').href;
});
} catch (error) {
console.error(error);
throw error;
} finally {
await nightmare.end();
}
})();
? evaluate, , .
await nightmare.goto(….), Nightmare .
, . , , , html , pdf , . form input type=”file”. alert, prompt, confirm, .
nightmare
, , , , 100% try catch . wait(selector) html , , , , - - .
nightmare.js , . , , . , , .
→
Nigthmare.js→
Electron!