最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

如何处理Node.js的同步浏览器仿真

运维笔记admin10浏览0评论

如何处理Node.js的同步浏览器仿真

如何处理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)

回答如下:

我看到一些问题与上面的代码。

  1. 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();
}
  1. 你可能不想来包装这个方法的内容在“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++;
  }
}
  1. 当你运行你的方法 - 确保包括一个catch!或者呢!否则,你的应用程序可能提前退出。
myBackEndLogic()
  .then(() => console.log('donesies!'))
  .catch(console.error);

我不知道是否有任何这将与您的特定问题上需要帮助,但希望它可以让你在正确的道路上:)

发布评论

评论列表(0)

  1. 暂无评论