296 lines
18 KiB
Python
296 lines
18 KiB
Python
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")
|