구현 기능 - 인스타그램 로그인, 설정한 횟수만큼 자동 좋아요 작업
작업환경 - 윈도우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()
다음 포스트에는 어떤 기능이?
이번 포스트에는 간단하게 인스타그램 로그인과 자동 좋아요 작업을 했습니다. 너무 간단해서 실제 사용시 아쉬운 부분이 있을 수 있기때문에 다음 포스트에서는 기능 강화와 예외처리를 추가하도록 하겠습니다. 광고 클릭은 포스트를 작성하는데 큰 힘이 됩니다!
- 인기게시물이 아닌 최신게시물을 대상으로 작업
- 이미 좋아요를 한 피드에 중복 작업 방지
- 다음 피드 선택시 예외 처리
'인스타그램 자동화' 카테고리의 다른 글
[파이썬(Python)] 인스타그램 자동 프로그램 만들기 - 자동 댓글 (2) (1) | 2021.02.27 |
---|---|
[파이썬(Python)] 인스타그램 자동 프로그램 만들기 - 자동 댓글 (1) (2) | 2021.02.27 |
인스타그램 자동 좋아요 프로그램 만들기 - 파이썬(python), 셀레니움(selenium) - 기능 강화 및 예외 처리 (5) | 2021.02.02 |
[Python] 인스타그램 자동 댓글 예제 (2) | 2020.06.28 |
[Python] 인스타그램 자동 좋아요 예제 (17) | 2020.06.27 |
댓글