from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.common.exceptions import NoSuchElementException import time import pickle from os.path import exists import random profile = webdriver.FirefoxProfile() # Socks5 Host SetUp:- group_initial_size = 1 user = "midoonamchidoosdariv2" myProxy = "127.0.0.1:1080" ip, port = myProxy.split(':') profile.set_preference('network.proxy.type', 1) profile.set_preference('network.proxy.socks', ip) profile.set_preference('network.proxy.socks_port', int(port)) target_post = "https://www.instagram.com/p/Cp-00sZKpQr/" target_story = "https://www.instagram.com/stories/highlights/17842412630962504/" is_story = True def check_exists_by_xpath(xpath): try: browser.find_element(By.XPATH, xpath) except NoSuchElementException: return False return True def save_coockie(): pickle.dump(browser.get_cookies(), open(f"cookies-{user}.pkl", "wb")) def load_coockie(): cookies = pickle.load(open(f"cookies-{user}.pkl", "rb")) for cookie in cookies: browser.add_cookie(cookie) browser = webdriver.Firefox(firefox_profile=profile) def addMember(index, wantsToaddMember): f = open(f"users-list-seo-web-{str(index)}.txt", "r") for line in f: username = line.split("://instagram.com/")[1] if not wantsToaddMember: searchinput = browser.find_element( By.XPATH, "/html/body/div[2]/div/div/div[2]/div/div/div[1]/div/div[2]/div/div/div/div/div[2]/div/div[2]/div[1]/div/div[2]/input") searchinput.send_keys(username) while not check_exists_by_xpath("/html/body/div[2]/div/div/div[2]/div/div/div[1]/div/div[2]/div/div/div/div/div[2]/div/div[2]/div[2]/div[1]/div[1]/div/div/div[2]/div/div/div[1]/span"): print("fetching ... ") time.sleep(1) targetelement = browser.find_element( By.XPATH, "/html/body/div[2]/div/div/div[2]/div/div/div[1]/div/div[2]/div/div/div/div/div[2]/div/div[2]/div[2]/div[1]/div[1]/div/div/div[2]/div/div/div[1]/span") targetelement.click() else: searchinput = browser.find_element( By.XPATH, "/html/body/div[2]/div/div/div[2]/div/div/div[1]/div/div[2]/div/div/div/div/div[2]/div/div[2]/div[1]/div/div[2]/input") searchinput.send_keys(username) while not check_exists_by_xpath("/html/body/div[2]/div/div/div[2]/div/div/div[1]/div/div[2]/div/div/div/div/div[2]/div/div[2]/div[2]/div[1]/div[1]/div/div/div[2]/div/div/div[1]/span"): print("fetching ... ") time.sleep(1) targetelement = browser.find_element( By.XPATH, "/html/body/div[2]/div/div/div[2]/div/div/div[1]/div/div[2]/div/div/div/div/div[2]/div/div[2]/div[2]/div[1]/div[1]/div/div/div[2]/div/div/div[1]/span") targetelement.click() def login(): if (exists(f"cookies-{user}.pkl")): browser.get('http://instagram.com') load_coockie() browser.refresh() return True else: browser.get('http://www.instagram.com') while not check_exists_by_xpath("/html/body/div[2]/div/div/div[1]/div/div/div/div[1]/section/main/article/div[2]/div[1]/div[2]/form/div/div [1]/ div/label/input"): print("waiting ...") time.sleep(1) usernameinput = browser.find_element( By.XPATH, "/html/body/div[2]/div/div/div[1]/div/div/div/div[1]/section/main/article/div[2]/div[1]/div[2]/form/div/div[1]/div/label/input") passwordinput = browser.find_element( By.XPATH, "/html/body/div[2]/div/div/div[1]/div/div/div/div[1]/section/main/article/div[2]/div[1]/div[2]/form/div/div[2]/div/label/input") usernameinput.send_keys(user) passwordinput.send_keys('22102210aA@') passwordinput.submit() while not check_exists_by_xpath("/html/body/div[2]/div/div/div[1]/div/div/div/div[1]/div[1]/div[1]/div/div/div/div/div[2]/div[1]/div/div/a/ div/div [2]/div/div"): print("loading ...") time.sleep(5) save_coockie() return True if __name__ == "__main__": if login(): browser.get("https://www.instagram.com/direct/inbox/") retry = 0 while not check_exists_by_xpath("/html/body/div[2]/div/div/div[2]/div/div/div[1]/div/div[2]/div/div/div/div/div[2]/div/div/div[3]/button[2]"): if retry == 5: break retry += 1 time.sleep(1) if check_exists_by_xpath("/html/body/div[2]/div/div/div[2]/div/div/div[1]/div/div[2]/div/div/div/div/div[2]/div/div/div[3]/button[2]"): browser.find_element( By.XPATH, "/html/body/div[2]/div/div/div[2]/div/div/div[1]/div/div[2]/div/div/div/div/div[2]/div/div/div[3]/button[2]").click() save_coockie() time.sleep(5) composeElement = browser.find_element( By.XPATH, "/html/body/div[2]/div/div/div[1]/div/div/div/div[1]/div[1]/div/div[2]/div/section/div/div/div/div/div[1]/div[1]/div/div[3]/button/div") composeElement.click() groupcreated = False cursor = 250 countUser = 0 addmemeberscount = 0 _range = cursor+100 f = open(f"users-list-seo-web.txt", "r") fc = open(f"cursor-seo-web.txt", "w") lines = f.readlines() allgpmembers = 0 while allgpmembers < 25: for line in lines[cursor:]: countUser += 1 fc.flush() fc.write(str(cursor) + str(countUser)) username = line.split("://instagram.com/")[1] if not groupcreated: searchinput = browser.find_element( By.XPATH, "/html/body/div[2]/div/div/div[2]/div/div/div[1]/div/div[2]/div/div/div/div/div[2]/div/div[2]/div[1]/div/div[2]/input") searchinput.send_keys(username) while not check_exists_by_xpath("/html/body/div[2]/div/div/div[2]/div/div/div[1]/div/div[2]/div/div/div/div/div[2]/div/div[2]/div[2]/div[1]/div[1]/div/div/div[2]/div/div/div[1]/span"): time.sleep(1) print("fetching ... ") retry += 1 if retry == 5: break if retry == 5: searchinput.clear() continue time.sleep(1) targetelement = browser.find_element( By.XPATH, "/html/body/div[2]/div/div/div[2]/div/div/div[1]/div/div[2]/div/div/div/div/div[2]/div/div[2]/div[2]/div[1]/div[1]/div/div/div[2]/div/div/div[1]/span") targetelement.click() else: searchinput = browser.find_element( By.XPATH, "/html/body/div[2]/div/div/div[2]/div/div/div[1]/div/div[2]/div/div/div/div/div[2]/div/div[2]/div[1]/div/div[2]/input") searchinput.send_keys(username) retry = 0 while not check_exists_by_xpath("/html/body/div[2]/div/div/div[2]/div/div/div[1]/div/div[2]/div/div/div/div/div[2]/div/div[2]/div[2]/div[1]/div[1]/div/div/div[2]/div/div/div[1]/span"): time.sleep(1) print("fetching ... ") retry += 1 if retry == 5: break if retry == 5: searchinput.clear() continue time.sleep(1) targetelement = browser.find_element( By.XPATH, "/html/body/div[2]/div/div/div[2]/div/div/div[1]/div/div[2]/div/div/div/div/div[2]/div/div[2]/div[2]/div[1]/div[1]/div/div/div[2]/div/div/div[1]/span") targetelement.click() addmemeberscount += 1 if addmemeberscount > group_initial_size: addmemeberscount = 0 print("chunk added", addmemeberscount) break nextelement = browser.find_element( By.XPATH, "/html/body/div[2]/div/div/div[2]/div/div/div[1]/div/div[2]/div/div/div/div/div[2]/div/div[1]/div/div[3]/div/button/div") nextelement.click() time.sleep(1) if not groupcreated: while not check_exists_by_xpath("/html/body/div[2]/div/div/div[1]/div/div/div/div[1]/div[1]/div/div[2]/div/section/div/div/div/div/div[2]/div[1]/div/div/div[3]/button[3]/div"): print("creating group ...") time.sleep(1) infoicon = browser.find_element( By.XPATH, "/html/body/div[2]/div/div/div[1]/div/div/div/div[1]/div[1]/div/div[2]/div/section/div/div/div/div/div[2]/div[1]/div/div/div[3]/button[3]/div") infoicon.click() gpName = f"میدونم چی دوس داری {str(random.randint(13, 500))}" groupname = browser.find_element( By.XPATH, "/html/body/div[2]/div/div/div[1]/div/div/div/div[1]/div[1]/div/div[2]/div/section/div/div/div/div/div[2]/div/div[2]/div[1]/div[1]/input") groupname.clear() groupname.send_keys(gpName) gpName = groupname.get_attribute('value') donebuttonelement = browser.find_element( By.XPATH, "/html/body/div[2]/div/div/div[1]/div/div/div/div[1]/div[1]/div/div[2]/div/section/div/div/div/div/div[2]/div/div[2]/div[1]/div[1]/div/button") donebuttonelement.click() if is_story: browser.get(target_story) while not check_exists_by_xpath("/html/body/div[2]/div/div/div[1]/div/div/div/div[1]/div[1]/section/div[1]/div/section/div/div[1]/div/div/div/div[3]/button"): print("waitning for story page to load") browser.find_element( By.XPATH, "/html/body/div[2]/div/div/div[1]/div/div/div/div[1]/div[1]/section/div[1]/div/section/div/div[1]/div/div/div/div[3]/button").click() while not check_exists_by_xpath("/html/body/div[2]/div/div/div[1]/div/div/div/div[1]/div[1]/section/div[1]/div/section/div/header/div[2]/div[2]/button[1]/div") or not check_exists_by_xpath("/html/body/div[2]/div/div/div[1]/div/div/div/div[1]/div[1]/section/div[1]/div/section/div/div[3]/div/div/div[3]/button/div"): print("waitning for story page to load") browser.find_element( By.XPATH, "/html/body/div[2]/div/div/div[1]/div/div/div/div[1]/div[1]/section/div[1]/div/section/div/header/div[2]/div[2]/button[1]/div").click() time.sleep(10) browser.find_element( By.XPATH, "/html/body/div[2]/div/div/div[1]/div/div/div/div[1]/div[1]/section/div[1]/div/section/div/div[3]/div/div/div[3]/button/div").click() searchinputelement = browser.find_element( By.XPATH, "/html/body/div[2]/div/div/div[2]/div/div/div[1]/div/div[2]/div/div/div/div/div[2]/div/div[2]/div[1]/div/div[2]/input") searchinputelement.send_keys(gpName) time.sleep(10) while not check_exists_by_xpath(browser.find_element(By.XPATH,f"/html/body/div[2]/div/div/div[2]/div/div/div[1]/div/div[2]/div/div/div/div/div[2]/div/div[2]/div[2]/div[2]/div[1]/div/div/div[2]/div/div/div[1]/span[text()='{gpName}']")): browser.find_element( By.TAG_NAME, "body").send_keys(Keys.ESCAPE) time.sleep(5) browser.find_element( By.XPATH, "/html/body/div[2]/div/div/div[1]/div/div/div/div[1]/div[1]/section/div[1]/div/section/div/div[3]/div/div/div[3]/button/div").click() gprow = browser.find_element( By.XPATH, "/html/body/div[2]/div/div/div[2]/div/div/div[1]/div/div[2]/div/div/div/div/div[2]/div/div[2]/div[2]/div[1]/div[1]/div/div/div[2]/div/div/div[1]/span") gprow.click() sendButton = browser.find_element( By.XPATH, "/html/body/div[2]/div/div/div[2]/div/div/div[1]/div/div[2]/div/div/div/div/div[2]/div/div[2]/div[4]/button") sendButton.click() else: browser.get(target_post) time.sleep(10) while not check_exists_by_xpath("/html/body/div[2]/div/div/div[1]/div/div/div/div[1]/div[1]/div[2]/section/main/div[1]/div/article/div/div[2]/div/div[2]/section[1]/span[3]/button"): print("waitning for page to load") time.sleep(1) sharebutton = browser.find_element( By.XPATH, "/html/body/div[2]/div/div/div[1]/div/div/div/div[1]/div[1]/div[2]/section/main/div[1]/div/article/div/div[2]/div/div[2]/section[1]/span[3]/button") sharebutton.click() while not check_exists_by_xpath("/html/body/div[2]/div/div/div[2]/div/div/div[1]/div/div[2]/div/div/div/div/div[2]/div/div[2]/div[1]/div/div[2]/input"): print("waitning for input") time.sleep(1) searchinputelement = browser.find_element( By.XPATH, "/html/body/div[2]/div/div/div[2]/div/div/div[1]/div/div[2]/div/div/div/div/div[2]/div/div[2]/div[1]/div/div[2]/input") searchinputelement.send_keys(gpName) time.sleep(10) while not check_exists_by_xpath("/html/body/div[2]/div/div/div[2]/div/div/div[1]/div/div[2]/div/div/div/div/div[2]/div/div[2]/div[2]/div[1]/div[1]/div/div/div[2]/div/div/div[1]/span"): browser.find_element( By.TAG_NAME, "body").send_keys(Keys.ESCAPE) sharebutton = browser.find_element( By.XPATH, "/html/body/div[2]/div/div/div[1]/div/div/div/div[1]/div[1]/div[2]/section/main/div[1]/div/article/div/div[2]/div/div[2]/section[1]/span[3]/button") sharebutton.click() time.sleep(5) gprow = browser.find_element( By.XPATH, "/html/body/div[2]/div/div/div[2]/div/div/div[1]/div/div[2]/div/div/div/div/div[2]/div/div[2]/div[2]/div[1]/div[1]/div/div/div[2]/div/div/div[1]/span") gprow.click() sendButton = browser.find_element( By.XPATH, "/html/body/div[2]/div/div/div[2]/div/div/div[1]/div/div[2]/div/div/div/div/div[2]/div/div[2]/div[4]/button") sendButton.click() browser.get("https://www.instagram.com/direct/inbox/") while not check_exists_by_xpath("/html/body/div[2]/div/div/div[1]/div/div/div/div[1]/div[1]/div/div[2]/div/section/div/div/div/div/div[1]/div[3]/div/div/div/div/div[1]/a/div[1]/div/div"): print("waitning for first row") time.sleep(1) firstRow = browser.find_element( By.XPATH, "/html/body/div[2]/div/div/div[1]/div/div/div/div[1]/div[1]/div/div[2]/div/section/div/div/div/div/div[1]/div[3]/div/div/div/div/div[1]/a/div[1]/div/div") firstRow.click() while not check_exists_by_xpath("/html/body/div[2]/div/div/div[1]/div/div/div/div[1]/div[1]/div/div[2]/div/section/div/div/div/div/div[2]/div[2]/div/div[2]/div/div/div[2]/textarea"): print("waitning for textarea") time.sleep(1) catName = " #تکنولوژی " + " #سئو " inputdirect = browser.find_element( By.XPATH, "/html/body/div[2]/div/div/div[1]/div/div/div/div[1]/div[1]/div/div[2]/div/section/div/div/div/div/div[2]/div[2]/div/div[2]/div/div/div[2]/textarea") inputdirect.send_keys(f"من میدونم تو به {catName} علاقه داری") while not check_exists_by_xpath("/html/body/div[2]/div/div/div[1]/div/div/div/div[1]/div[1]/div/div[2]/div/section/div/div/div/div/div[2]/div[2]/div/div[2]/div/div/div[3]/button"): print("waitning for send button") time.sleep(1) sendButtonElement = browser.find_element( By.XPATH, "/html/body/div[2]/div/div/div[1]/div/div/div/div[1]/div[1]/div/div[2]/div/section/div/div/div/div/div[2]/div[2]/div/div[2]/div/div/div[3]/button") sendButtonElement.click() while not check_exists_by_xpath("/html/body/div[2]/div/div/div[1]/div/div/div/div[1]/div[1]/div/div[2]/div/section/div/div/div/div/div[2]/div[1]/div/div/div[3]/button[3]/div"): print("creating group ...") time.sleep(1) infoicon = browser.find_element( By.XPATH, "/html/body/div[2]/div/div/div[1]/div/div/div/div[1]/div[1]/div/div[2]/div/section/div/div/div/div/div[2]/div[1]/div/div/div[3]/button[3]/div") infoicon.click() while not check_exists_by_xpath("/html/body/div[2]/div/div/div[1]/div/div/div/div[1]/div[1]/div/div[2]/div/section/div/div/div/div/div[2]/div/div[2]/div[2]/div/div[1]/button"): print("waiting for addpeople button") time.sleep(1) time.sleep(20) try: addPeoplebutton = browser.find_element( By.XPATH, "/html/body/div[2]/div/div/div[1]/div/div/div/div[1]/div[1]/div/div[2]/div/section/div/div/div/div/div[2]/div/div[2]/div[2]/div/div[1]/button") addPeoplebutton.click() except: pass groupcreated = True print("Done")