Skip to content

Commit

Permalink
add lesson3
Browse files Browse the repository at this point in the history
  • Loading branch information
pythontoday committed Jul 27, 2020
1 parent 1a75966 commit 8acef84
Show file tree
Hide file tree
Showing 2 changed files with 174 additions and 0 deletions.
170 changes: 170 additions & 0 deletions lesson_3/lesson3.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from auth_data import username, password
import time
import random
from selenium.common.exceptions import NoSuchElementException


class InstagramBot():
"""Instagram Bot на Python by PythonToday"""

def __init__(self, username, password):

self.username = username
self.password = password
self.browser = webdriver.Chrome("../chromedriver/chromedriver")

# метод для закрытия браузера
def close_browser(self):

self.browser.close()
self.browser.quit()

# метод логина
def login(self):

browser = self.browser
browser.get('https://www.instagram.com')
time.sleep(random.randrange(3, 5))

username_input = browser.find_element_by_name('username')
username_input.clear()
username_input.send_keys(username)

time.sleep(2)

password_input = browser.find_element_by_name('password')
password_input.clear()
password_input.send_keys(password)

password_input.send_keys(Keys.ENTER)
time.sleep(10)

# метод ставит лайки по hashtag
def like_photo_by_hashtag(self, hashtag):

browser = self.browser
browser.get(f'https://www.instagram.com/explore/tags/{hashtag}/')
time.sleep(5)

for i in range(1, 4):
browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(random.randrange(3, 5))

hrefs = browser.find_elements_by_tag_name('a')
posts_urls = [item.get_attribute('href') for item in hrefs if "/p/" in item.get_attribute('href')]

for url in posts_urls:
try:
browser.get(url)
time.sleep(3)
like_button = browser.find_element_by_xpath(
'/html/body/div[1]/section/main/div/div[1]/article/div[3]/section[1]/span[1]/button').click()
time.sleep(random.randrange(80, 100))
except Exception as ex:
print(ex)
self.close_browser()

# метод проверяет по xpath существует ли элемент на странице
def xpath_exists(self, url):

browser = self.browser
try:
browser.find_element_by_xpath(url)
exist = True
except NoSuchElementException:
exist = False
return exist

# метод ставит лайк на пост по прямой ссылке
def put_exactly_like(self, userpost):

browser = self.browser
browser.get(userpost)
time.sleep(4)

wrong_userpage = "/html/body/div[1]/section/main/div/h2"
if self.xpath_exists(wrong_userpage):
print("Такого поста не существует, проверьте URL")
self.close_browser()
else:
print("Пост успешно найден, ставим лайк!")
time.sleep(2)

like_button = "/html/body/div[1]/section/main/div/div/article/div[3]/section[1]/span[1]/button"
browser.find_element_by_xpath(like_button).click()
time.sleep(2)

print(f"Лайк на пост: {userpost} поставлен!")
self.close_browser()

# метод ставит лайки по ссылке на аккаунт пользователя
def put_many_likes(self, userpage):

browser = self.browser
browser.get(userpage)
time.sleep(4)

wrong_userpage = "/html/body/div[1]/section/main/div/h2"
if self.xpath_exists(wrong_userpage):
print("Такого пользователя не существует, проверьте URL")
self.close_browser()
else:
print("Пользователь успешно найден, ставим лайки!")
time.sleep(2)

posts_count = int(browser.find_element_by_xpath("/html/body/div[1]/section/main/div/header/section/ul/li[1]/span/span").text)
loops_count = int(posts_count / 12)
print(loops_count)

posts_urls = []
for i in range(0, loops_count):
hrefs = browser.find_elements_by_tag_name('a')
hrefs = [item.get_attribute('href') for item in hrefs if "/p/" in item.get_attribute('href')]

for href in hrefs:
posts_urls.append(href)

browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(random.randrange(2, 4))
print(f"Итерация #{i}")

file_name = userpage.split("/")[-2]

with open(f'{file_name}.txt', 'a') as file:
for post_url in posts_urls:
file.write(post_url + "\n")

set_posts_urls = set(posts_urls)
set_posts_urls = list(set_posts_urls)

with open(f'{file_name}_set.txt', 'a') as file:
for post_url in set_posts_urls:
file.write(post_url + '\n')

with open(f'{file_name}_set.txt') as file:
urls_list = file.readlines()

for post_url in urls_list[0:6]:
try:
browser.get(post_url)
time.sleep(2)

like_button = "/html/body/div[1]/section/main/div/div/article/div[3]/section[1]/span[1]/button"
browser.find_element_by_xpath(like_button).click()
# time.sleep(random.randrange(80, 100))
time.sleep(2)

print(f"Лайк на пост: {post_url} успешно поставлен!")
except Exception as ex:
print(ex)
self.close_browser()

self.close_browser()


my_bot = InstagramBot(username, password)
my_bot.login()
my_bot.put_many_likes("https://www.instagram.com/username/")

4 changes: 4 additions & 0 deletions lesson_3/test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
name = "https://www.instagram.com/username/"

file_name = name.split("/")[-2]
print(file_name)

0 comments on commit 8acef84

Please sign in to comment.