본문 바로가기
프로젝트/인스타그램 좋아요 봇

파이썬 인스타그램 좋아요 봇 만들기 #8 페이지 새로고침

by 큰공 2020. 9. 17.
728x90
반응형

개요

 파이썬 자동화 프로그램을 만들어 자동으로 좋아요를 하는 봇을 만들어 보자

 혹시나 앞선 포스팅을 못 봤다면 복습하고 오자.

2020/08/26 - [IT/파이썬] - 파이썬 인스타그램 좋아요 봇 만들기 #1 Selenium

2020/08/27 - [IT/파이썬] - 파이썬 인스타그램 좋아요 봇 만들기 #2 로그인

2020/08/31 - [IT/파이썬] - 파이썬 인스타그램 좋아요 봇 만들기 #3 태그검색

2020/09/02 - [IT/파이썬] - 파이썬 인스타그램 좋아요 봇 만들기 #4 좋아요 누르기

2020/09/07 - [IT/파이썬] - 파이썬 인스타그램 좋아요 봇 만들기 #5 최근 게시물 선택하기

2020/09/08 - [IT/파이썬] - 파이썬 인스타그램 좋아요 봇 만들기 #6 랜덤함수

2020/09/14 - [IT/파이썬] - 파이썬 인스타그램 좋아요 봇 만들기 #7 list index out of range

 

아이디어

 좋아요를 왜 봇까지 만들어서 누르는가? 좋아요 반사를 위하거나 나를 알림으로써 팔로워 수를 늘리기 위함일 것이다.

 사실 인스타그램 특징상 이미 많은 수의 좋아요를 누른 게시물에 좋아요를 누르는것과 게시한지 오래된 게시물에 좋아요를 누르는것은 이 나의 애초의 목적을 달성하는 데에 부족하다. 

 가장 효과가 좋다고 생각되는 것은 바로 내가 게시글을 올리자마자 처음으로 좋아요를 한사람이다. 필자도 게시물을 올리자마자 좋아요를 누른 사람은 뭔가 특별해 보이고 한번쯤 그 프로필에 놀러 가보고 싶다는 생각이 든다.

 우선 #7 게시물 까지의 코드는 좋아요 숫자를 무한대로 늘릴수는 있긴하지만, 다음 게시물을 많이 타게 될 경우, 오래된 게시물에 좋아요를 누르는 경우가 많이 생긴다.

 

목표

 좋아요를 일정 횟수 눌렀다면, 게시물을 새로 고쳐서 다시 최근 게시물에 좋아요를 누르도록 해보자.

 기존 로직 : 좋아요 100개를 연속적으로 수행 (랜덤으로 다음 게시물로 띄어 넘음)

 변경 로직 : 좋아요 10개를 연속적으로 수행하고, 페이지를 새로 고쳐서 다시 좋아요 10개를 수행. 새로 고침을 10번 수행

 동일하게 좋아요를 100개 누르는거지만, 분명한 차이가 있다고 생각된다.

 

새로고침 함수

 자 그럼 Selenium 에서 제공하는 새로고침 함수를 찾아보자

# Selenium 에서는 다음 3가지 방법으로 Refresh 를 제공한다.

# refresh method
driver.refresh()

# get method
driver.get(driver.current_url)

# execute_script method
driver.execute_script("location.reload()")

 그러나, 여기서 다시 또 문제에 봉착한다. 게시물을 선택한 상태에서 새로고침을 수행하면, 태그 검색화면으로 새로고쳐지는게 아니라 현재 게시물이 새로고쳐진다. 이는 처음 의도했던 바와 다르다.

 

이전페이지 이동

 위의 get method 를 좀 더 살펴보자. 

 Get method 는 인자로 url 을 넣는다. 

 즉,  get mothod 에 현재 페이지 주소를 인자로 넣어 주는 방법으로 새로고침을 수행하는데, 그럼 이전 페이지를 넣으면 되지 않을까?

# 태그 검색 하기
time.sleep(1)
search = browser.find_element_by_xpath('//*[@id="react-root"]/section/nav/div[2]/div/div/div[2]/input')
search.send_keys('#먹스타그램')

# 최상위 검색 결과로 진입하기 Enter 두번으로 수행 
time.sleep(3)
search.send_keys(Keys.RETURN) #최상위 검색결과로 Focus 이동
search.send_keys(Keys.RETURN) #검색결과 새로운 창으로 이동

prev_url = browser.current_url #이번 수정사항의 핵심 코드

 prev_url 이라는 변수를 지정하고, 첫번째 게시물을 선택하기 전의 Url 을 변수에 저장하자.

 그리고, 다음 게시물 이동이 끝나면, 이전에 저장한 Url 로 이동하도록 수정하자.

        for b in range(randint(random_next_min,random_next_max)):
            nextFeed()

    browser.get(prev_url)

 

반복 변수 설정

 상단에 얼마나 반복해야 할지 나타내는 변수를 설정한다. 

 refresh_count 는 새로고침을 얼마나 하는지를 나타내고, ontime_count는 한번 새로고침을 했을 때, 좋아요를 연속으로 얼마나 누를지를 나타낸다.

 즉, 아래 코드는 총 500번의 좋아요를 수행하게 된다.

refresh_count = 20
onetime_count = 25
# Total Like Count is refesh_count * onetime_count

 

완성코드

for b in range(refresh_count):

    # 최근 게시물 중 첫번쨰 게시물 선택하기
    time.sleep(5)
    feed = browser.find_element_by_xpath('//*[@id="react-root"]/section/main/article/div[1]/div/div/div[3]/div[3]/a')
    feed.send_keys(Keys.ENTER)
    nextFeed()

    for a in range(onetime_count):
        # 좋아요 누르기
        time.sleep(randint(random_wait_min,random_wait_max))
        try:
            like_list = browser.find_elements_by_xpath('//article//section/span/button')
            like_list[0].click() #list 중 0번째 버튼을 선택
            like_count += 1
            print ("like count = ", like_count )
        except :
            print ("exception!")
        
        # 다음 피드로 이동하기
        for b in range(randint(random_next_min,random_next_max)):
            nextFeed()

    browser.get(prev_url)
    print ("refresh!")

 

총평

 selenium 의 새로고침 함수와, Get 함수를 이용한 URL이동에 대해서 알아보자.

 중첩 반복문을 통한 500개 좋아요를 20*25 의 형식으로 동작하게 하자.

 

 

 

728x90
반응형

댓글