Advertisement
cocaineee

Instagram Bot

Feb 9th, 2017
2,706
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var webdriver = require('selenium-webdriver'),
  2. by = webdriver.By,
  3. Promise = require('promise'),
  4. settings = require('./settings.json');
  5.  
  6. var log4js = require('log4js');
  7. log4js.loadAppender('file');
  8. log4js.addAppender(log4js.appenders.file('instabot.log'), 'instabot');
  9. var logger = log4js.getLogger('instabot');
  10. logger.setLevel('DEBUG');
  11.  
  12. var xpath_first_photo = '//header/../div/div/div[1]/a[1]';
  13. var xpath_like_class = '//div[@id="fb-root"]/following-sibling::div[1]/div/div/following-sibling::div[1]/div/article/div[2]/section[2]/a/span';
  14. var xpath_like_button = '//div[@id="fb-root"]/following-sibling::div[1]/div/div/following-sibling::div[1]/div/article/div[2]/section[2]/a';
  15. var xpath_nextprev_buttons = '//div[@id="fb-root"]/following-sibling::div[1]/div/div/div/div/*';
  16.  
  17. var browser = new webdriver
  18.     .Builder()
  19.     .withCapabilities(webdriver.Capabilities.chrome())
  20.     .build();
  21.  
  22. browser.manage().window().setSize(1024, 700);
  23. browser.get('https://www.instagram.com/accounts/login/');
  24. browser.sleep(settings.sleep_delay);
  25. browser.findElement(by.name('username')).sendKeys(settings.instagram_account_username);
  26. browser.findElement(by.name('password')).sendKeys(settings.instagram_account_password);
  27. browser.findElement(by.xpath('//button')).click();
  28. browser.sleep(settings.sleep_delay).then(function() {
  29.     like_by_nickname(0);
  30. });
  31.  
  32. function like_by_nickname(indexNickname) {
  33.     if (indexNickname >= settings.instagram_accounts_to_be_liked.length) {
  34.         logger.info('Everything is done. Finishing...');
  35.         browser.quit();
  36.         return;
  37.     }
  38.     var promise = new Promise(function (resolve, reject) {    
  39.         browser.sleep(settings.sleep_delay);
  40.         logger.info('Doing likes for: ' + settings.instagram_accounts_to_be_liked[indexNickname]);
  41.         browser.get('https://instagram.com/' + settings.instagram_accounts_to_be_liked[indexNickname]);
  42.         browser.sleep(settings.sleep_delay);
  43.         browser.findElement(by.xpath(xpath_first_photo)).click().then(function () {
  44.             like(resolve, 0, settings.like_depth_per_user);
  45.         });
  46.     });
  47.     promise.then(function() {
  48.         indexNickname++;
  49.         like_by_nickname(indexNickname);
  50.     });
  51. };
  52.  
  53. function like(resolve, index, max_likes) {
  54.     browser.getCurrentUrl().then(function(url) {
  55.         logger.debug('Current url:   ' + url);
  56.         browser.sleep(settings.sleep_delay);
  57.  
  58.         browser.findElement(by.xpath(xpath_like_class)).getAttribute('class').then(function(classname) {
  59.             logger.debug('CSS Classname: ' + classname);
  60.             if (settings.smart_like_mode && (classname.indexOf('whiteoutSpriteHeartFull') > 0)) {
  61.                 logger.info('Already liked. Stopping...');
  62.                 resolve();
  63.                 return;
  64.             } else {
  65.                 if (classname.indexOf('whiteoutSpriteHeartOpen') > 0) {
  66.                     browser.findElement(by.xpath(xpath_like_button)).click();
  67.                     browser.sleep(settings.sleep_delay);
  68.                 };
  69.                 // Analyzing "Next" button availability
  70.                 browser.findElements(by.xpath(xpath_nextprev_buttons)).then(function(buttons) {
  71.                     logger.debug('Buttons: ' + buttons.length + ', Photo Index: ' + index);
  72.                     if (((index == 0) && (buttons.length == 1)) || (buttons.length == 2)) {
  73.                         buttons[buttons.length - 1].click().then(function() {
  74.                             // if we exceed maximum likes depth, stop like this current user.
  75.                             index++;
  76.                             if (index == max_likes) {
  77.                                 resolve();
  78.                                 return;
  79.                             }
  80.                             like(resolve, index, max_likes);
  81.                         });
  82.                     } else {
  83.                         // "Next" button doesn't exist. Stop like this current user.
  84.                         logger.info('Next button does not exist. Stopping...');
  85.                         resolve();
  86.                         return;
  87.                     }
  88.                 });
  89.             }
  90.         });
  91.     });
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement