인스타그램 자동화

인스타그램 자동 좋아요 프로그램 만들기 - 파이썬(python), 셀레니움(selenium) - 로그인, 원하는 횟수만큼 좋아요 작업

dev109 2021. 2. 2.
반응형

 

 

구현 기능 - 인스타그램 로그인, 설정한 횟수만큼 자동 좋아요 작업

작업환경 - 윈도우10, VS Code, Python3

 

 

오늘 구현해 볼 기능은 아주 간단한 인스타그램 로그인과 설정한 횟수만큼 자동으로 좋아요 작업을 반복해주는 기능입니다. 이 포스트를 시작으로 좋아요 -> 좋아요 기능 강화 -> 댓글 -> 댓글 기능 강화 -> 팔로우까지 포스팅할 예정이며 좋아요+댓글+팔로우 기능이 모두 완료되면 차단 태그 등록, 팔로워 제외 작업 등 다양한 포스트가 작성 될 예정이오니 많은 관심 바랍니다.

 

 

프로그램 구동 화면


로그인중인 프로그램 화면
좋아요 작업중
작업 완료


 

크롬 드라이버 및 셀레니움(selenium) 설치

파이썬으로 자동화 기능을 구현하기 위해서는 셀레니움(selenium)과 크롬 브라우저, 크롬 드라이버가 필요합니다.


✔크롬 드라이버 설치

크롬 브라우저 버전 확인 후 https://chromedriver.chromium.org/downloads 에서 동일한 버전의 드라이버 다운로드 -> 압축 해제 후 폴더내에 있는 chromedriver.exe 파일을 프로젝트 생성한 폴더로 이동

✔셀레니움 설치

pip install selenium

 

크롬 드라이버 로딩 & 필요한 변수 정의


from selenium import webdriver
import inspect, os, platform, time


#필요한 변수 정의
insta_id = input('인스타그램 아이디 : ')
insta_pw = input('인스타그램 패스워드 : ')
insta_tag = input('작업할 해시태그 : ')
insta_cnt = int(input('작업횟수(숫자만) : '))


#크롬드라이버 로딩
options = webdriver.ChromeOptions()
options.add_argument('--disable-gpu')
options.add_argument('user-agent=Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36')

current_folder = os.path.realpath(
os.path.abspath(os.path.split(inspect.getfile(inspect.currentframe()))[0]))

if platform.system() == 'Windows':
    driver_path = os.path.join(current_folder, 'chromedriver.exe')
else:
	driver_path = os.path.join(current_folder, 'chromedriver')

driver = webdriver.Chrome(driver_path, options=options)
driver.implicitly_wait(10)

크롬 드라이버와 셀레니움 설치를 완료하였으면 본격적으로 인스타그램 자동 좋아요 기능을 구현할 차례입니다.

인스타그램 자동 좋아요 기능을 구현하기 위해서 필요한 값은 총 4가지입니다. 

  • 인스타그램 아이디
  • 인스타그램 패스워드
  • 작업할 해시태그 : 입력한 해시태그로 검색된 피드에 자동 좋아요 작업을 하게됩니다.
  • 작업 횟수 : 입력한 횟수만큼 자동으로 반복하며, int 형식으로 받기때문에 숫자로 입력하지 않으면 에러가 발생합니다.

크롬 드라이버의 위치는 직접 입력할 수도 있고, 소스에 구현되어 있는대로 윈도우/ 맥 별로 경로를 설정할 수 있습니다. 크롬 드라이버가 소스코드 파일과 같은 위치에 있는 경우 위 소스처럼 작성하시고, 다른 위치에 있는 경우에는 if~else를 제거하고 아래의 webdriver.Chrome('드라이버가 위치한 패스', options=optinos) 를 설정해주세요.

'implicitly_wait(초)' 는 요소가 로딩될때까지 암묵적으로 기다리는 시간입니다. 현재 소스에서는 10초간 로딩을 기다리도록 설정되어 있고, 10초가 되기전에 로딩이 완료된다면 더 이상 기다리지 않고 다음 작업을 수행합니다.

* 크롬 드라이버 옵션의 자세한 내용은 아래의 링크를 확인해주세요.(업로드 예정)

 

 

 

인스타그램 로그인

# 1. 인스타그램 로그인 페이지로 이동
driver.get('https://www.instagram.com/?hl=ko')
print('로그인중....')
time.sleep(3)

# 2. 아이디 입력창을 찾아서 위에서 입력받은 아이디(insta_id)값 입력
id_input = driver.find_element_by_xpath('//*[@id="loginForm"]/div/div[1]/div/label')
id_input.click() #입력창 클릭
id_input.send_keys(insta_id) #아이디 입력


# 2. 패스워드 입력창을 찾아서 위에서 입력받은 패스워드(insta_pw)값 입력
pw_input = driver.find_element_by_xpath('//*[@id="loginForm"]/div/div[2]/div/label')
pw_input.click()
pw_input.send_keys(insta_pw)

# 3. 로그인 버튼 클릭
login_btn = driver.find_element_by_xpath('//*[@id="loginForm"]/div/div[3]/button')
login_btn.click()


# 잠시 대기
time.sleep(3)

1. 인스타그램 로그인을 위해 로그인 페이지로 이동합니다. 로그인 페이지로 이동한 뒤 페이지가 로딩되기위해 3초간 대기합니다. - time.sleep(3)

2. 아이디와 패스워드를 입력하기 위해 find_element_by_xpath()로 입력칸을 찾은뒤 send_keys() 로 처음에 입력받은 인스타그램 아이디와 패스워드를 입력합니다.

3. 마찬가지로 로그인 버튼을 찾고 클릭해줍니다. 클릭 한 뒤 잠시 3초간 대기합니다.

 

 

해시태그 검색 결과(피드 목록) 페이지로 이동 & 첫번째 피드 선택

# 4. 작업할 해시태그 검색 결과 페이지로 이동
driver.get('https://www.instagram.com/explore/tags/{}/'.format(insta_tag))
time.sleep(2)

# 5. 인기게시물 첫번째 피드 선택
first_feed = driver.find_element_by_xpath('//*[@id="react-root"]/section/main/article/div[1]/div/div/div[1]/div[1]/a/div/div[2]')
first_feed.click()
time.sleep(1)

4. 처음에 입력받은 인스타그램 해시태그의 결과 페이지로 이동합니다. 이동 후 2초간 대기해줍니다.

5. 인기 게시물 목록 중 첫번째 페이지를 찾아서 클릭합니다. 클릭 후 1초간 대기해줍니다.

인스타그램 해시태그 검색 결과(피드 목록)는 인기게시물 순서뿐 아니라 최근게시물 순서도 정렬되어 있습니다. 최근게시물을 대상으로 하는 작업은 아래의 링크를 참고해주세요.(업로드 예정)

 

 

반복 좋아요 작업

# 6. 좋아요 작업 - 입력한 횟수만큼 반복 작업
for idx in range(insta_cnt):
  div = driver.find_element_by_xpath('/html/body/div[5]/div[2]/div/article/div')
  div = div.find_element_by_xpath('/html/body/div[5]/div[2]/div/article/div[3]')
  like_btn = div.find_element_by_tag_name('button') #좋아요 버튼

  like_btn.click() #좋아요 클릭
  print('{}번째 피드 좋아요 작업 완료'.format(idx + 1))

  # 너무 빠르게 작업을 할 경우 많은 양의 작업을 하게 되어 인스타그램측에서 계정 정지나 경고를 할 수 있으니
  # 작업과 다음 작업 사이의 속도를 조절하기 위해 20초 이상을 설정해주세요.
  time.sleep(5)

  # 7. 좋아요 작업 - 다음 피드로 이동
  if idx < insta_cnt:
    next_feed = driver.find_element_by_link_text('다음')
    next_feed.click()

print('모든 작업 완료')
driver.quit()

드디어 좋아요 작업을 할 차례입니다!

6. 그동안 해왔던것과 마찬가지로 좋아요 버튼을 찾은 뒤 클릭해줍니다.

주의사항은 좋아요 작업 후 대기를 하지 않고 바로 다음 좋아요 작업을 하게 될 경우 너무 많은 작업을 하게 되어 인스타그램측에서 계정 정지나 경고를 할 수 있으니 반복횟수에 따라 대기시간을 30초 이상으로 설정하시길 바랍니다.

또한, 좋아요 작업을 하지 않고 피드만 넘기더라도 짧은시간내에 너무 많은 피드(데이터 요청)을 하게되면 일시적으로 피드가 로딩되지 않아 작업을 할 수 없으니 유의바랍니다.

7. 피드의 '>' 버튼을 찾아서 클릭해 다음 피드로 이동합니다.

for문을 이용해 처음에 입력받은 작업 횟수만큼 좋아요 -> 다음피드 이동이 반복되며, 횟수만큼 작업이 완료될 경우 더이상 다음 피드로 이동하지 않도록 if문을 통해 조건식을 걸어줍니다.

8. 모든 작업 완료 후에는 dirver.quti()를 이용해 사용한 크롬 드라이버를 종료시켜줍니다.

 

전체 소스 코드

# -*- coding: utf-8 -*-

from selenium import webdriver
import inspect, os, platform, time


def bot():
    #필요한 변수 정의
    insta_id = input('인스타그램 아이디 : ')
    insta_pw = input('인스타그램 패스워드 : ')
    insta_tag = input('작업할 해시태그 : ')
    insta_cnt = int(input('작업횟수(숫자만) : '))


    #크롬드라이버 로딩
    options = webdriver.ChromeOptions()
    options.add_argument('--disable-gpu')
    options.add_argument('user-agent=Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36')

    current_folder = os.path.realpath(
                os.path.abspath(os.path.split(inspect.getfile(inspect.currentframe()))[0]))

    if platform.system() == 'Windows':
        driver_path = os.path.join(current_folder, 'chromedriver.exe')
    else:
        driver_path = os.path.join(current_folder, 'chromedriver')

    driver = webdriver.Chrome(driver_path, options=options)
    driver.implicitly_wait(10)

    
    ### 인스타그램 자동 좋아요 작업 ###
    
    # 1. 인스타그램 로그인 페이지로 이동
    driver.get('https://www.instagram.com/?hl=ko')
    print('로그인중....')
    time.sleep(3)

    # 2. 아이디 입력창을 찾아서 위에서 입력받은 아이디(insta_id)값 입력
    id_input = driver.find_element_by_xpath('//*[@id="loginForm"]/div/div[1]/div/label')
    id_input.click() #입력창 클릭
    id_input.send_keys(insta_id) #아이디 입력


    # 2-1. 패스워드 입력창을 찾아서 위에서 입력받은 패스워드(insta_pw)값 입력
    pw_input = driver.find_element_by_xpath('//*[@id="loginForm"]/div/div[2]/div/label')
    pw_input.click()
    pw_input.send_keys(insta_pw)

    # 3. 로그인 버튼 클릭
    login_btn = driver.find_element_by_xpath('//*[@id="loginForm"]/div/div[3]/button')
    login_btn.click()


    # 잠시 대기
    time.sleep(3)


    # 4. 작업할 해시태그 검색 결과 페이지로 이동
    driver.get('https://www.instagram.com/explore/tags/{}/'.format(insta_tag))
    time.sleep(2)

    # 5. 인기게시물 첫번째 피드 선택
    first_feed = driver.find_element_by_xpath('//*[@id="react-root"]/section/main/article/div[1]/div/div/div[1]/div[1]/a/div/div[2]')
    first_feed.click()
    time.sleep(1)

    # 6. 좋아요 작업 - 입력한 횟수만큼 반복 작업
    for idx in range(insta_cnt):
        div = driver.find_element_by_xpath('/html/body/div[5]/div[2]/div/article/div')
        div = div.find_element_by_xpath('/html/body/div[5]/div[2]/div/article/div[3]')
        like_btn = div.find_element_by_tag_name('button') #좋아요 버튼

        like_btn.click() #좋아요 클릭
        print('{}번째 피드 좋아요 작업 완료'.format(idx + 1))

        # 너무 빠르게 작업을 할 경우 많은 양의 작업을 하게 되어 인스타그램측에서 계정 정지나 경고를 할 수 있으니
        # 작업과 다음 작업 사이의 속도를 조절하기 위해 20초 이상을 설정해주세요.
        time.sleep(5)

        # 7. 좋아요 작업 - 다음 피드로 이동
        if idx < insta_cnt:
            next_feed = driver.find_element_by_link_text('다음')
            next_feed.click()

    print('모든 작업 완료')
    driver.quit()


bot()



 

 

다음 포스트에는 어떤 기능이?

이번 포스트에는 간단하게 인스타그램 로그인과 자동 좋아요 작업을 했습니다. 너무 간단해서 실제 사용시 아쉬운 부분이 있을 수 있기때문에 다음 포스트에서는 기능 강화와 예외처리를 추가하도록 하겠습니다. 광고 클릭은 포스트를 작성하는데 큰 힘이 됩니다!

  • 인기게시물이 아닌 최신게시물을 대상으로 작업
  • 이미 좋아요를 한 피드에 중복 작업 방지
  • 다음 피드 선택시 예외 처리

 

 

반응형

댓글

💲 추천 글