instagram-scrap-2/sendDm.py

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")