Nightmare.js(v2.3.3)を使用して、ワークフローの一部を自動化し、データベースを更新するWebサイトにアクセスする必要があります。私は.type
,.click
、.screenshot
のような基本的なもののためにナイトメアを働かせて、私がこれらのページにアクセスして、私が意図した情報を入力していることを確認できました。Nightmare.js(v2 Electron)を使用してブラウザからNodeスコープに情報を渡すことはできますか?
私は立ち往生しており、文書が不足しているようで、.evaluate
を使用してページから情報を抽出しています。ドキュメントでは、としてそれを持っています
.evaluate(fn [,arg1,arg2,...])
var selector = 'h1';
var text = yield nightmare
.evaluate(function (selector) {
// now we're executing inside the browser scope.
return document.querySelector(selector).innerText;
}, selector); // <-- that's how you pass parameters from Node scope to browser scope
これはすべてが順調と良いですが、逆の方向に行くと範囲をノードにブラウザの範囲から情報を渡すために、実際に可能ですか?私がしたいのは、ページ上のすべてのチェックボックスを配列として返し、Nightmareスクリプトでループさせることです。
また、私は多くのGitHubの問題とStackOverflowの質問を検索して答えを見つけましたが、以前のバージョンはPhantomJSで構築されていて、v2 +はElectronを使用していると思われるので、現在のバージョンに戻します。 Hereは私にとって理にかなった答えですが、2014年になったので、PhantomJSバージョンである可能性が最も高いと考えています。参考までに、これはスコープをノードにブラウザから転送する方法の答えを持っているように見えたスニペットです:
var p1=1,
p2 = 2;
nightmare
.evaluate(function(param1, param2){
//now we're executing inside the browser scope.
return param1 + param2;
}, function(result){
// now we're inside Node scope again
console.log(result);
}, p1, p2 // <-- that's how you pass parameters from Node scope to browser scope
) //end evaluate
.run();
しかし、悪夢の現在のバージョンは、この.evaluate(fn, cb, arg1, arg2,...)
形式をサポートしていることを思えないのですか?
私は自分自身を狂ってしまう前にこれが可能かどうかを知りたいのですが!ご協力いただきありがとうございます。回答に必要な情報が必要な場合にお知らせください。
私は理解していません。あなたの最初のスニペットでは、 'text'はページコンテキストからノードコンテキストに渡された値を含んでいなければなりません。それは? @ArtjomB。 –
私の理解からではありません。 「悪夢をもたらす」とは、命令の連鎖に従って悪夢のインスタンスを開始することだけです。 – rynjwssl