【问题标题】:linkedin bot by adding people automaticallyLinkedin bot 通过自动添加人员
【发布时间】:2016-12-21 21:11:52
【问题描述】:

我尝试通过使用 nodejs 和 nightmarejs 来学习网络抓取。

我想创建一个可以连接到我的linkedin帐户的机器人,然后寻找一种技术,例如javascript,然后将工作表中每个配置文件的链接添加到一个表格中,并使用这个表格,我想使用带有“for”的循环来单击每个链接。最后,我为工作表上的每个个人资料发送邀请。

这是我的代码:

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')
}    


  });

我在控制台中键入 node script.js 'jquery',它告诉我'urls is not defined',我不明白我的错误在哪里。 如果你能帮助我,那将非常有帮助:) 谢谢,

凯夫

【问题讨论】:

  • 有人帮我吗? :)

标签: javascript jquery node.js nightmare


【解决方案1】:

您在使用 Nightmare 时遇到了两个常见的陷阱。首先,变量提升 - 就像您尝试使用 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);
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-24
    • 1970-01-01
    • 2019-10-06
    • 2021-02-07
    • 1970-01-01
    • 1970-01-01
    • 2012-10-25
    • 1970-01-01
    相关资源
    最近更新 更多