InstagramBot
Instagram Bot
The bot is coded in python and uses selenium (plus its drivers) . I used the firefox as a host for the bot.
Bot Functionality
- Opens FireFox browser.
- Opens Instagram.com
- Logs in (provided you’ve given the username and password).
- Searches for an account (provided you’ve given the account name).
- Automated Following/Liking/Posting.
- Closing the browser.
Requirments :
- Python
- Python Extension - Selenium
- FireFox geckodriver
- An instagram account (So the bot can use the account)
- FireFox
Download/Clone full code here
Stuff to import before coding
from selenium import webdriver
from selenium.webdriver.common.keys import Keys 
from time import sleep #inbuilt function 
The xpaths used in this code will work for firefox . The delay/sleep time can be customised .
Launching FireFox :
To launch the browser , you will need to give the path to geckodriver (dl link above) . eg : X:\my_bot\geckodriver.exe
exe_path = input("Enter the path of your driver : ")
global browser
browser = webdriver.Firefox(executable_path = exe_path) #Gets the geckodriver
Opening Instagram and logging in :
To log in on Instagram , you will need to find the xpath 3 elements :
- Username
- Password
- Submit button
The bot will automatically fill the username , password and press the submit button. When you log in , the page will ask you to turn on notification everytime . To turn it off find the xpath of the not now button and click it (code is included below).
class insta_bot():
	def __init__(self,usrname,pswrd):
		#going to the website
		browser.get("http://instagram.com")
		sleep(2)
		#finding the username and password input area and filling them
		logindets = browser.find_element_by_xpath("//input[@name=\"username\"]")\
			.send_keys(usrname)
		logindets = browser.find_element_by_xpath("//input[@name=\"password\"]")\
			.send_keys(pswrd)
		#the button to login is "submit" type , so using that to find it and clicking it
		logindets = browser.find_element_by_xpath('//button[@type="submit"]')\
			.click()
		sleep(5)
		#this is used to click on Not now button in the notifications , can be removed if its not shown
		browser.find_element_by_xpath("//button[contains(text(), 'Not Now')]")\
            .click()
		sleep(3)
username = input("Enter the username of your account : ")
password = input("Enter the password of your account : ")
my_bot = insta_bot(username,password)
I’ve used a constructor in class to launch instagram and log in . But it is not necessary , it works perfectly fine outside a class also.
To find an account :
To search for the account , you need to find the search bar’s xpath. The bot will fill the name in search bar and press Return twice , The page will be directed to that account.
	def finduser(self,name):
		#finding the search bar and entering name 
		browser.find_element_by_xpath("/html/body/div[1]/section/nav/div[2]/div/div/div[2]/input")\
			.send_keys(name + Keys.RETURN)
		sleep(2)
		#to click on the searched name
		browser.find_element_by_xpath("//a[contains(@href,'/{}')]".format(name))\
			.send_keys(Keys.RETURN)
		sleep(5)
like_acc = input("Enter the Account name : ")
my_bot.finduser(like_acc)
Following an account :
Find the xpath of follow button and click on it.
def follow():
	sleep(1)
	browser.find_element_by_xpath("//button[contains(text(), 'Follow')]").click()
follow()
Liking / Commenting on a Post :
After going to an account , to like/comment on a post . Click on the first post (by finding the xpath).
def first_post(): 
	# finds the first post 
	pic = browser.find_element_by_class_name("_9AhH0") 
	pic.click() # clicks on the first post 
first_post() 
To like the post , find the xpath of the like button and click it.
def like_post(): 
	sleep(2) 
	like = browser.find_element_by_xpath('/html/body/div[4]/div[2]/div/article/div[2]/section[1]/span[1]/button') 
	# finding the like button
	sleep(2) 
	like.click() # clicking the like button
like_post()
To comment on the post , find the xpath of the comment box and click on it . Fill the message and click on post.
def comment_post(message):
	sleep(2)
	#finds the comment's area and clicks on it
	comment = browser.find_element_by_xpath('/html/body/div[4]/div[2]/div/article/div[2]/section[3]/div/form/textarea')
	comment.click()
	sleep(2)
	#Types the comment
	browser.find_element_by_xpath('/html/body/div[4]/div[2]/div/article/div[2]/section[3]/div/form/textarea').send_keys(message)
	sleep(1)
	#Posts the comment
	browser.find_element_by_xpath("//button[contains(text(), 'Post')]").click()
msg = input("Enter the comment you want to spam : ")
comment_post(msg)
To like/comment on all posts :
To do this we need a way to go to the next post , Again all we have to do is find the xpath of next button and click it.
def next_post(): 
	sleep(2) 
	# finds the button which gives the next post 
	nex = browser.find_element_by_xpath('/html/body/div[4]/div[1]/div/div/a[2]')
	sleep(1) 
	return nex 
Call the like/comment and next function using a loop to spam likes/comments
def like_till_the_end(): 
	next_el = browser.find_element_by_xpath('/html/body/div[4]/div[1]/div/div/a')
	while(True): 
		try: 
			# click the next button 
			next_el.click() 
			sleep(2) 
			# like the post 
			like_post()	 
			sleep(2)	
			next_el = next_post()		 
		except Exception as e: 
			print("The last post")  #When it reaches the end 
			break
def comment_till_the_end(): 
	next_el = browser.find_element_by_xpath('/html/body/div[4]/div[1]/div/div/a')
	while(True): 
		# if next button is there then 
		try: 
			# click the next button 
			next_el.click() 
			sleep(2) 
			# comments on the post 
			comment_post(msg)	 
			sleep(2)	
			next_el = next_post()		 
		except Exception as e: 
			print("The last post") #When it reaches the end 
			break
like_till_the_end()
comment_till_the_end()		
The program will print out “The last post” . When it finishes liking / commenting on all posts.
To close the browser
This will close the firefox browser which geckodriver is using.
	def quit(self,secs):
		sleep(secs)
		#command to close the browser 
		browser.quit()
		
my_bot.quit(5)
Warnings If you get the error element not found in xpath (…) , It is because in the future they may update website changing the xpath or its id . A simple fix is to right click on the element in the page and click on inspect . Then right click on the highlighted part -> copy -> xpath , replace the new xpath by overwritting the old one .
References
