如何处理Node.js的同步浏览器仿真
我正在写的目的是从.txt文件加载一些东西,然后执行多个(在一个循环中)要求与node.js`浏览器模拟器噩梦网站的脚本。
我有从TXT文件,所以没有看书,而是管理,使其运行同步,无异常没有问题。
function visitPage(url, code) {
new Promise((resolve, reject) => {
Nightmare
.goto(url)
.click('.vote')
.insert('input[name=username]', 'testadmin')
.insert('.test-code-verify', code)
.click('.button.vote.submit')
.wait('.tag.vote.disabled,.validation-error')
.evaluate(() => document.querySelector('.validation -error').innerHTML)
.end()
.then(text => {
return text;
})
});
}
async function myBackEndLogic() {
try {
var br = 0, user, proxy, current, agent;
while(br < loops){
current = Math.floor(Math.random() * (maxLoops-br-1));
/*...getting user and so on..*/
const response = await visitPage('',"code")
br++;
}
} catch (error) {
console.error('ERROR:');
console.error(error);
}
}
myBackEndLogic();
出现的错误是:UnhandledPromiseRejectionWarning:类型错误:无法读取的未定义的属性“webContents”
所以,问题有几个:
1)如何修复异常
2)如何使它实际工作同步和模拟每次地址(如在以前的尝试,我没救了,我固定异常,但浏览器实际上并没有开扩和它基本上跳过
3)(不那么重要)是否有可能选择与几个对象
.wait('.class1,.class2,.validation-error')
并保存在不同的变量每个值或只是摆脱第一所发生的文本? (如果没有任何的这些已经发生,则例如返回0)
回答如下:我看到一些问题与上面的代码。
- 在
visitPage
功能,你是返回一个承诺。这很好,但你没有创建包装的承诺!它看起来像噩梦返回给你的承诺。今天,你会下降,承诺通过包装它返回一个错误。相反 - 只需使用异步功能!
async function visitPage(url, code) {
return Nightmare
.goto(url)
.click('.vote')
.insert('input[name=username]', 'testadmin')
.insert('.test-code-verify', code)
.click('.button.vote.submit')
.wait('.tag.vote.disabled,.validation-error')
.evaluate(() => document.querySelector('.validation -error').innerHTML)
.end();
}
- 你可能不想来包装这个方法的内容在“try / catch语句”。只是让许流:)
async function myBackEndLogic() {
var br = 0, user, proxy, current, agent;
while(br < loops){
current = Math.floor(Math.random() * (maxLoops-br-1));
const response = await visitPage('https://example/admin/login',"code")
br++;
}
}
- 当你运行你的方法 - 确保包括一个catch!或者呢!否则,你的应用程序可能提前退出。
myBackEndLogic()
.then(() => console.log('donesies!'))
.catch(console.error);
我不知道是否有任何这将与您的特定问题上需要帮助,但希望它可以让你在正确的道路上:)