Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #Written by: [email protected]
- from selenium import webdriver
- from selenium.webdriver.common.keys import Keys
- from selenium.webdriver.chrome.options import Options
- from selenium.webdriver.support.ui import WebDriverWait
- from selenium.webdriver.common.by import By
- from selenium.webdriver.support import expected_conditions as EC
- import time
- import random
- from tqdm import tqdm
- class Instagram:
- def __init__(self, username, password, tags):
- """ NB tags should be list e.g tags=["Tech", "Fitness"]"""
- self.username = username
- self.password = password
- self.tags = tags
- self.options = Options()
- self.options.add_argument("--disable-notifications")
- self.driver = webdriver.Chrome("chromedriver.exe", options=self.options)
- def login(self):
- print("Working please wait...")
- try:
- self.driver.get("https://www.instagram.com/accounts/login/?source=auth_switcher")
- except Exception:
- return "Invalid Login Details Or Bad Network Connection"
- time.sleep(4)
- username_input = self.driver.find_element_by_xpath("""//*[@id="react-root"]/section/main/div/article/div/div[1]/div/form/div[2]/div/label/input""")
- password_input = self.driver.find_element_by_xpath("""//*[@id="react-root"]/section/main/div/article/div/div[1]/div/form/div[3]/div/label/input""")
- username_input.click()
- username_input.clear()
- password_input.click()
- password_input.clear()
- username_input.send_keys(self.username)
- password_input.send_keys(self.password, Keys.ENTER)
- time.sleep(4)
- def get_post_from_tags(self):
- post_links = []
- for tag in self.tags:
- try:
- self.driver.get(f"https://www.instagram.com/explore/tags/{tag}/")
- time.sleep(3)
- sub_post_links = [link.get_attribute("href") for link in self.driver.find_elements_by_tag_name("a") if "/p/" in link.get_attribute("href")]
- post_links.extend(sub_post_links)
- except Exception:
- pass
- return post_links
- def execute(self, all_comments):
- self.login()
- post_links = self.get_post_from_tags()
- for post_link in tqdm(post_links[0:]):
- self.driver.get(post_link)
- time.sleep(3)
- self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
- time.sleep(2)
- try:
- self.comment(comments=all_comments)
- except Exception as e:
- print(e)
- return "Please ensure you are logged in with your correct credentials"
- time.sleep(random.randint(18, 28))
- print("Completed Successfully")
- def comment(self, comments):
- text_area = lambda:self.driver.find_element_by_tag_name("textarea")
- text_area().click()
- text_area().clear()
- comment = random.choice(comments)
- for letter in comment:
- sleep_interval = random.randint(1, 7)/30
- text_area().send_keys(letter)
- time.sleep(sleep_interval)
- self.like()
- text_area().send_keys(Keys.ENTER)
- def like(self):
- try:
- like_btn = lambda:self.driver.find_element_by_xpath('//span[@class="glyphsSpriteHeart__outline__24__grey_9 u-__7"]')
- self.driver.execute_script("arguments[0].click();", like_btn())
- except Exception as e:
- pass
- bot = Instagram(username="username", password="password", tags=["fitness", "lifestyle"])
- bot.execute(all_comments=["Nice!", "Great Post", "Well Done", "Lovely"])
Advertisement