2017-10-26 1 views
-1

私は擦っているウェブに基づいてグローバル変数を設定したいと思います。しかし、私は.evaluateと.thenだけでこれを行うことができました。それは私が必要としているものではありません。それ以来何も動かすことができなかったからです。ブラウザスコープでグローバル変数を設定する方法.wait(fn)NightmareJS

ありがとうございました! :)

var global; 
 

 
nightmare 
 
.goto(url) 
 
.wait(() => { 
 
    global = document.getElementById("element").textContent; 
 
}) 
 
.click() 
 
.wait() 
 
.more...

答えて

0

人々はグローバル変数で物事を行うにはないことを教えてくれます。私はちょうどいくつかの小さなスクリプトでいくつかのデータを保存して使いたいと思う。変数を後で使用するために保存するには、いくつかの方法があります。私は今のところデータベースとそのようなものを経由しません。

ナイトメアインスタンス内のウィンドウオブジェクト

それは限り、あなたは同じページで、ページを更新していないとして存在しますので、あなたは、ウィンドウオブジェクトを使用することができます。

await nightmare 
.goto(url) 
.evaluate(() => { 
    window.aGlobalVariable = document.getElementById("element").textContent; 
}) 

その後、同じページにいる間は後で呼び出すことができます。

await nightmare 
.evaluate(() => { 
    console.log(`${aGlobalVariable} looks tasty`); 
}) 

保存と今、あなたはnodeJSコンテキストからaGlobalVariableにアクセスすることができますコンテキスト

let aGlobalVariable; 
aGlobalVariable = await nightmare 
.goto(url) 
.evaluate(() => { 
    return document.getElementById("element").textContent; 
}) 

間の変数を渡します。 もう一度ナイトメアに入れたいときは、いつでもブラウザに戻すことができます。

await nightmare 
.goto(url) 
.evaluate((aGlobalVariable) => { // <-- call it in the function 
    console.log(`${aGlobalVariable} looks tasty.`) 
}, aGlobalVariable) // <-- pass it here 

そうでなければ、これらのコードを実行するときに奇妙なエラーが発生してしまいます、あなたが待っていますと約束非同期について知っていることを確認します。

ここにその参考資料があります。

+0

ありがとうございました! :) –

+0

@BertramSkarupaうまくいけば、答えとして選択して、未回答の検索には表示されません。そうでなければ何がうまくいかなかったか教えてください:) –

+0

私はそれを働かせることができませんでした。非常に助けになる小さなサンプルスクリプトを私に送ってください。ありがとうございます:) –

関連する問題