如何在浏览器范围内设置全局变量.wait(fn) NightmareJS
How to set a global variable in Browser scope .wait(fn) NightmareJS
我想根据我正在抓取的网络设置一个全局变量。但是,我只能使用 .evaluate 和 .then 来做到这一点。这不是我需要的,因为在那之后我无法 运行 任何东西。
感谢您的帮助! :)
var global;
nightmare
.goto(url)
.wait(() => {
global = document.getElementById("element").textContent;
})
.click()
.wait()
.more...
人们会告诉你不要用全局变量做事。我猜你只是想在一些小脚本中存储和使用一些数据。有几种方法可以保存变量供以后使用。我现在不会通过数据库和类似的东西。
Window Nightmare 实例中的对象
您可以使用 window 对象,因为只要您在同一页面并且不刷新页面,它就会存在。
await nightmare
.goto(url)
.evaluate(() => {
window.aGlobalVariable = document.getElementById("element").textContent;
})
稍后只要您在同一页面中,您就可以稍后再调用它。
await nightmare
.evaluate(() => {
console.log(`${aGlobalVariable} looks tasty`);
})
在上下文之间保存和传递变量
let aGlobalVariable;
aGlobalVariable = await nightmare
.goto(url)
.evaluate(() => {
return document.getElementById("element").textContent;
})
现在您可以从 nodeJS 上下文访问 aGlobalVariable。
每当你想再次在 nightmareJS 中使用它时,如果你愿意,你可以再次将它传递给浏览器。
await nightmare
.goto(url)
.evaluate((aGlobalVariable) => { // <-- call it in the function
console.log(`${aGlobalVariable} looks tasty.`)
}, aGlobalVariable) // <-- pass it here
确保您了解 async await 和 promises,否则当 运行 这些代码时您最终会遇到奇怪的错误。
这里有一些参考资料。
您可以设置全局变量并在评估函数中访问它们
const p1 = 1;
const p2 = 2;
nightmare
.evaluate(
function (param1, param2) {
//now we're executing inside the browser scope.
return param1 + param2;
},
p1,
p2
)
.end();
我想根据我正在抓取的网络设置一个全局变量。但是,我只能使用 .evaluate 和 .then 来做到这一点。这不是我需要的,因为在那之后我无法 运行 任何东西。
感谢您的帮助! :)
var global;
nightmare
.goto(url)
.wait(() => {
global = document.getElementById("element").textContent;
})
.click()
.wait()
.more...
人们会告诉你不要用全局变量做事。我猜你只是想在一些小脚本中存储和使用一些数据。有几种方法可以保存变量供以后使用。我现在不会通过数据库和类似的东西。
Window Nightmare 实例中的对象
您可以使用 window 对象,因为只要您在同一页面并且不刷新页面,它就会存在。
await nightmare
.goto(url)
.evaluate(() => {
window.aGlobalVariable = document.getElementById("element").textContent;
})
稍后只要您在同一页面中,您就可以稍后再调用它。
await nightmare
.evaluate(() => {
console.log(`${aGlobalVariable} looks tasty`);
})
在上下文之间保存和传递变量
let aGlobalVariable;
aGlobalVariable = await nightmare
.goto(url)
.evaluate(() => {
return document.getElementById("element").textContent;
})
现在您可以从 nodeJS 上下文访问 aGlobalVariable。 每当你想再次在 nightmareJS 中使用它时,如果你愿意,你可以再次将它传递给浏览器。
await nightmare
.goto(url)
.evaluate((aGlobalVariable) => { // <-- call it in the function
console.log(`${aGlobalVariable} looks tasty.`)
}, aGlobalVariable) // <-- pass it here
确保您了解 async await 和 promises,否则当 运行 这些代码时您最终会遇到奇怪的错误。
这里有一些参考资料。
您可以设置全局变量并在评估函数中访问它们
const p1 = 1;
const p2 = 2;
nightmare
.evaluate(
function (param1, param2) {
//now we're executing inside the browser scope.
return param1 + param2;
},
p1,
p2
)
.end();