David의 개발 이야기!

인스타그램 자동 좋아요 누르기 프로그램 만들기! 본문

크롤링 공부

인스타그램 자동 좋아요 누르기 프로그램 만들기!

david.kim2028 2021. 12. 16. 00:58
반응형

인스타그램에 자동으로 로그인해서 특정 키워드에 대한 모든 게시물에 "좋아요"를 누르는 프로그램을 만들어보았다!

 

[ 키워드를 입력하고 인스타그램에 로그인 하는 부분 ] 

hash_tag = input("해쉬태그 입력 >>> ")
browser = webdriver.Chrome("./chromedriver")
url = browser.get("https://www.instagram.com/?hl=ko")
time.sleep(3)

id = browser.find_element_by_name("username")     #name 속성값으로 가져오는 방법! #find_element_by_css_sellector써도 무관!
id.send_keys("아이디 입력")
pw = browser.find_element_by_name("password")
pw.send_keys("비밀번호 입력")

browser.find_element_by_css_selector("div.qF0y9.Igw0E.IwRSH.eGOV_._4EzTm").click() #공백은 지워주고 중간의 공백들은 . 으로 바꾸어준다!
time.sleep(7)

url = "https://www.instagram.com/explore/tags/{}".format(hash_tag)
browser.get(url)
time.sleep(7)

 

browser.find_element_by_name  -> 태그 검색

send.keys() -> 입력

click() -> 클릭

 

 

[ 첫번째 사진 클릭하는 코드 ] 

browser.find_element_by_css_selector("div._9AhH0").click()

time.sleep(7)

 

[ 자동으로 좋아요 누르게 동작시키는 코드 ]

while True:
    like = browser.find_element_by_css_selector("section.ltpMr.Slqrh span > svg._8-yf5")
    value = like.get_attribute("aria-label") #주의! 꼭 알아두기!
    next = browser.find_element_by_css_selector("div.l8mY4.feth3 button.wpO6b")
    if value == "좋아요":
        like.click()
        time.sleep(random.randint(2,5) + random.random()) #불규칙하게 넘기는 것을 만들기 위함! 인스타그램이 셀레니움은 차단함!
        next.click()
        time.sleep(random.randint(2,5) + random.random()) #불규칙하게 넘기는 것을 만들기 위함! 인스타그램이 셀레니움은 차단함!
    elif value == "좋아요 취소":
        next.click()
        time.sleep(random.randint(2,5) + random.random()) #불규칙하게 넘기는 것을 만들기 위함! 인스타그램이 셀레니움은 차단함!

인스타그램에서 좋아요(하트)가 눌려져있으면 넘어가고, 안눌러져있으면 누르도록 만들기 위해 

get_attribute("속성명") -> 속성값 반환!   를 통해, 속성값을 받아 IF문으로 만들었다. 

 

중요한 포인트중 하나는, 인스타그램 좋아요 누르거나 어떤 행동을 규칙적이게 만들면 차단당할 우려가 있어, 

random.randint(a,b) -> a,b사이의 정수 반환

random.random(()) -> 0,1사이의 소수 반환

을 통해 무작위로 time.sleep()해주었다!

 

[ 인스타그램 자동 좋아요 + 해당 글과 닉네임 엑셀저장 코드 ] 

from selenium import webdriver
import time
import random
import os
import openpyxl
import unicodedata #엑셀저장시, 자모음 분리되는 문제를 해결하기 위해 필요함!

if not os.path.exists("./인스타그램.xlsx"):
    book = openpyxl.Workbook()
    book.save("./인스타그램.xlsx")

book = openpyxl.load_workbook("./인스타그램.xlsx")
#sheet = book["Sheet1"]
sheet = book.active #열리는 그 시트를 쓰겠다

hash_tag = input("해쉬태그 입력 >>> ")
browser = webdriver.Chrome("./chromedriver")
url = browser.get("https://www.instagram.com/?hl=ko")
time.sleep(3)

id = browser.find_element_by_name("username")     #name 속성값으로 가져오는 방법! #find_element_by_css_sellector써도 무관!
id.send_keys("*****************")
pw = browser.find_element_by_name("password")
pw.send_keys("++++++++++++++++++!")

browser.find_element_by_css_selector("div.qF0y9.Igw0E.IwRSH.eGOV_._4EzTm").click() #공백은 지워주고 중간의 공백들은 . 으로 바꾸어준다!
time.sleep(7)

url = "https://www.instagram.com/explore/tags/{}".format(hash_tag)
browser.get(url)
time.sleep(7)

#첫번째 사진 클릭하기
browser.find_element_by_css_selector("div._9AhH0").click()

time.sleep(7)

#자동 좋아요 동작시키기
row_num = 1
while True:

    like = browser.find_element_by_css_selector("section.ltpMr.Slqrh span > svg._8-yf5")
    value = like.get_attribute("aria-label") #주의! 꼭 알아두기!
    next = browser.find_element_by_css_selector("div.l8mY4.feth3 button.wpO6b")
    ### 크롤링 ###
    nick_name = browser.find_element_by_css_selector("a.sqdOP.yWX7d._8A5w5.ZIAjV") #find_element_by_css_selector 는 가장위에 있는 것 반환함
    content = browser.find_element_by_css_selector("div.C4VMK > span")
    content_normalize = unicodedata.normalize("NFC", content.text) #한글의 자모음 분리해결!
    sheet.cell(row= row_num, column=1).value = nick_name.text        #.value를 써야 시트에 글을 쓸 수 있는 상태로 변함!
    sheet.cell(row= row_num, column=2).value = content.text        #.text를 써야 text만 나옴
    row_num += 1
    book.save("./인스타그램.xlsx")
    if value == "좋아요":
        like.click()
        time.sleep(random.randint(2,5) + random.random()) #불규칙하게 넘기는 것을 만들기 위함! 인스타그램이 셀레니움은 차단함!
        next.click()
        time.sleep(random.randint(2,5) + random.random()) #불규칙하게 넘기는 것을 만들기 위함! 인스타그램이 셀레니움은 차단함!
    elif value == "좋아요 취소":
        next.click()
        time.sleep(random.randint(2,5) + random.random()) #불규칙하게 넘기는 것을 만들기 위함! 인스타그램이 셀레니움은 차단함!

 

여기서 포인트는, 1.  엑셀파일이 있는 지 없는지 유무를 검사하고, 있으면 거기에, 없으면 새로 만들어 저장하는 부분과, 2. 한글 자모음이 깨지는 문제를 해결하는 방법이다!

 

1번과 같은 것은, 아래와 같이 해결한다!

if not os.path.exists("./인스타그램.xlsx"):
    book = openpyxl.Workbook()
    book.save("./인스타그램.xlsx")

book = openpyxl.load_workbook("./인스타그램.xlsx")
#sheet = book["Sheet1"]
sheet = book.active #열리는 그 시트를 쓰겠다

 

2번은, 다음과 같이 해결한다!

import unicodedata #엑셀저장시, 자모음 분리되는 문제를 해결하기 위해 필요함!

    ### 크롤링 ###
    nick_name = browser.find_element_by_css_selector("a.sqdOP.yWX7d._8A5w5.ZIAjV") #find_element_by_css_selector 는 가장위에 있는 것 반환함
    content = browser.find_element_by_css_selector("div.C4VMK > span")
    content_normalize = unicodedata.normalize("NFC", content.text) #한글의 자모음 분리해결!
    sheet.cell(row= row_num, column=1).value = nick_name.text        #.value를 써야 시트에 글을 쓸 수 있는 상태로 변함!
    sheet.cell(row= row_num, column=2).value = content.text        #.text를 써야 text만 나옴
    row_num += 1
    book.save("./인스타그램.xlsx")

unicodedata를 불러오고, content.text를 normalize한다!

 

.text를 붙여한다는 것과, 엑셀에 저장할때, .value를 붙여야한다는 점을 유의하자!

 

 

반응형
Comments