LoveTech Bots

LoveTech Bots

Summary

Selenium WebDriver is a great way to crawl almost any website!

Install Selenium WebDriver

Download Eclipse: https://www.eclipse.org/downloads/packages/eclipse-ide-java-developers/mars2

Download Java jdk: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

Download ChromeDriver.exe: https://sites.google.com/a/chromium.org/chromedriver/downloads

Download Selenium Java jar: http://www.seleniumhq.org/download/

Download JSON jar: https://mvnrepository.com/artifact/org.json/json/20170516

Common Bot Methods

These common methods are used by many of our bots:

public static String runJavascript(WebDriver driver, String script) {
	WebElement body = driver.findElement(By.cssSelector("body"));
	return (String)((JavascriptExecutor)driver).executeScript(script, body);
}

Twitter Bot:

import java.io.File;
import java.io.PrintWriter;

import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.support.ui.ExpectedConditions;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class TwitterBot {

	public static void main(String[] args) throws InterruptedException, JSONException {
		System.setProperty("webdriver.chrome.driver", "C:/Selenium/chromedriver.exe");
		//I'll hide this
		String twitterUsername 	=	"Username";
		String password = "Password";
		WebDriver driver = new ChromeDriver();
		loadjQuery(driver);
		twitterLogin(driver, twitterUsername, password, false);
		searchTwitter(driver, "Phil Ochs");
		waitForTwitterSearch(driver);
		likeEverything(driver);
		while(loadMoreTwitterContent(driver)) {
			likeEverything(driver);
		}
	}
	
	private static void waitForTwitterSearch(WebDriver driver) throws InterruptedException {
		Thread.sleep(2200);
		WebDriverWait wait = new WebDriverWait(driver, 10);
		WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.className("stream")));
	}
	private static void likeEverything(WebDriver driver) throws InterruptedException {
		runJavascript(driver, "if(typeof mainTimer != 'undefined') { window.clearInterval(mainTimer); } var globalInd = 0; var btns = $('.tweet:not(.tweet-promoted) .js-actions .ProfileTweet-action--favorite:not(.clicked)'); var mainTimer = window.setInterval(function() {  var btn = $(btns[globalInd]); globalInd++;  if(btn.find('.ProfileTweet-actionButtonUndo:visible').length == 0) {  btn.find('button').click();  }  btn.addClass('clicked');  } , 333);");
		Thread.sleep(20000);
	}

	private static void searchTwitter(WebDriver driver, String query) {
		runJavascript(driver, "$('.search-input').val('" + query + "');$('button.nav-search').click()");
	}
	private static Boolean loadMoreTwitterContent(WebDriver driver) throws InterruptedException {
		String startHeight = runJavascript(driver, "var startHeight = $(document).height(); return ''+startHeight;");
		runJavascript(driver, "$(document).scrollTop($(document).height());");
		Thread.sleep(2000);
		String endHeight = runJavascript(driver, "var endHeight = $(document).height(); return ''+endHeight");
		return !(startHeight.equals(endHeight));
	}

	public static void twitterLogin(WebDriver driver, String username, String password, Boolean logoutFirst) {
		if(logoutFirst) {
			driver.get("https://twitter.com/logout");
		}
		driver.get("https://twitter.com/login");
		//System.out.println("$('input.email-input').val('" + username + "');$('input[type=\"password\"]').val('" + password + "');$('button[type=\"submit\"]').click()");
		runJavascript(driver, "$('input.email-input').val('" + username + "');$('input[type=\"password\"]').val('" + password + "');$('button[type=\"submit\"]').click()");
	}

	//See Common Bot Methods
}

Explore Chakra7 Today