自动添加人员来验证机器人

时间:2016-12-21 21:11:53

标签: javascript jquery node.js nightmare

我尝试使用nodejs和nightmarejs来学习网页报废。

我想创建一个可以连接到我的linkedin帐户的机器人,然后寻找一种技术,例如javascript,然后将工作表中每个配置文件的链接添加到一个表中,并且使用此表,我想使用"的循环用于"单击每个链接。最后,我会在工作表上发送每个配置文件的邀请。

这是我的代码:

var Nightmare = require('nightmare');
var nightmare = Nightmare({ show: true })

 var langage = process.argv[2];

 var urls = [];
 nightmare
    .viewport(1000, 720)
    .goto('https://www.linkedin.com/')
    .type('#login-email', '**********@gmail.com')
    .type('#login-password', '*********')
    .click('#login-submit')
    .wait(3000)
    .type('#main-search-box', langage)
    .wait(3000)
    .click('.search-button')
    .wait(2000)
    .click('a[data-li-vertical-type="people"]')
    .wait()
    .evaluate(function () {
 var link = [];
    $('.primary-action-button.label').each(function(i, item) {
    link.push($(item).attr('href'));
    urls = link;
})

    }
})

.run(function (err, nightmare) {
if (err) return console.log(err);
console.log('Done!');


for (var i = 0; i< urls.length; i++ ) {
nightmare
    .goto(urls[i])
    .click('#IF-reason-iweReconnect')
    .wait()
    .click('.btn-primary')
}    


  });

我输入节点script.js&#39; jquery&#39;进入控制台,它告诉我“网址没有定义”,我不知道我的错误在哪里。 如果你能帮助我,那真的很有帮助:) 谢谢,

千电子伏

1 个答案:

答案 0 :(得分:0)

你在与梦魇中遇到两个常见的陷阱。首先,变量提升 - 就像你试图用urls数组一样 - 并不像你想象的那样工作。由于.evaluate() d函数传递给Electron的方式,.evaluate()内的范围无法使用封闭范围内的变量。修复此操作相当简单:从已评估的函数返回数组并对.then()进行中间调用。像(为简洁而编辑)的东西:

.evaluate(function () {
    var link = [];
    $('.primary-action-button.label').each(function(i, item) {
      link.push($(item).attr('href'));
    })
    return link;
 })
 .then(function(urls){
    nightmare.goto(urls[0]) ...
 })

要获得更深入的解释,您可能需要阅读Variable Lifting and .evaluate()

你几乎要立刻遇到的第二个问题是循环某些东西并使用Nightmare实例来执行某些命令。按照设计,Nightmare是异步的,因此你所拥有的循环是行不通的。您可能还想给Async Operations and Loops一个读数。从那里解除了相关的香草JS例子:

var urls = ['http://example1.com', 'http://example2.com', 'http://example3.com'];
urls.reduce(function(accumulator, url) {
  return accumulator.then(function(results) {
    return nightmare.goto(url)
      .wait('body')
      .title()
      .then(function(result){
        results.push(result);
        return results;
      });
  });
}, Promise.resolve([])).then(function(results){
    console.dir(results);
});
相关问题