개요
파이썬 자동화 프로그램을 만들어 자동으로 좋아요를 하는 봇을 만들어 보자
혹시나 앞선 포스팅을 못 봤다면 복습하고 오자.
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
2020/09/17 - [IT/파이썬] - 파이썬 인스타그램 좋아요 봇 만들기 #8 페이지 새로고침
2020/10/05 - [IT/파이썬] - 파이썬 인스타그램 좋아요 봇 만들기 #9 xpath 찾기
파이썬 인스타그램 좋아요 봇 만들기 #9 xpath 찾기
개요 파이썬 자동화 프로그램을 만들어 자동으로 좋아요를 하는 봇을 만들어 보자 혹시나 앞선 포스팅을 못 봤다면 복습하고 오자. 2020/08/26 - [IT/파이썬] - 파이썬 인스타그램 좋아요 봇 만들�
coinpipe.tistory.com
들어가며
앞선 코드로 좋아요 봇을 돌릴경우, 이미 좋아요를 누른 게시물에 또 좋아요 버튼을 누르다보니, 이미 좋아요를 누를 게시물에 좋아요가 취소가 된다. ㅠㅠ
이를 보안하기 위해서 이 게시물이 좋아요를 누른 게시물인지, 아닌지를 판단하는 조건문을 추가해야 한다. 해당 부분에 대한 조건을 찾기 위해서 우선, 좋아요 버튼의 위치를 알아보자.
find_elements_by_class_name
이번에는 좋아요 버튼을 찾기위해서 find_element_by_class_name 함수를 이용하여, class name 을 통해서 찾아 보자.
각 element 는 class name을 가지고 있는데, 이 class name 은 하나의 페이지에서 하나 일 수도 있고 여러개 일 수도 있다. 먼저, 크롬 Developer Tool을 통해서 해당 버튼의 Class name 을 찾자.
좋아요 버튼의 class name 은 "_8-yf5" 이다.
복수의 Class Name
_8-yf5 의 Class name 을 가지는 게시물이 하나이면 참 좋겠지만은, 해당 페이지에서 해당 게시물에서 class name을 가지는 element 는 많게는 12개 적게는 9개다. 그것도 가변적이다.
여기서 조심해야 할 점은 find_elements_by_class_name / find_element_by_class_name 함수가 다르다는 것이다. s 하나의 차이로 이는 매우 다른 결과를 초래한다.
s 가 붙은 함수는 페이지에서 모든 elements를 찾아서 이를 list 형태로 return 해주며, s가 붙지 않은 함수는 첫 번째 element 만 return 한다.
따라서, 우리는 find_elements_by_class_name 을 사용해야 하며, 좋아요 버튼은 _8-yf5 로 검색된 리스트 중 5번째 element 이다.
Aria-Label
Aria-label 는 속성값 중의 하나이며, 해당 속성은 현재 요소에 레이블을 정의하기 위해서 사용합니다. 텍스트 레이블이 화면에 표시되지 않을 때에 사용하세요.
class name 으로 해당 element를 찾았지만, 이 게시물의 좋아요를 누른 게시물인지, 아닌지는 이 Aria-label 로 판단한다.
좋아요를 누른 게시물과 아닌 게시물의 차이를 살펴보자.
바로, aria-label 의 값이 "좋아요"에서, "좋아요 취소" 로 바뀜을 알 수 있다.
완성된 코드
상기의 로직으로 코드를 완성해보자, class name "_8-yf5" 로 모든 elements 를 list 로 return 받고, 그 중 5번째의 elements 의 aria-lable 속성값을 얻어와서, 이것이 "좋아요" 이면, 좋아요를 안누른 게시물이고, 이것이 "좋아요 취소" 이면 좋아요를 누른 게시물이다.
기존의 좋아요를 누르는 코드에 추가하였다.
like_list = browser.find_elements_by_xpath('//article//section/span/button')
likeBtnTxt = browser.find_elements_by_class_name('_8-yf5 ')
if likeBtnTxt[5].get_attribute("aria-label") != 'Unlike' : # or '좋아요'
like_list[0].click() #list 중 0번째 버튼을 선택
like_count += 1
print ("like count = ", like_count )
else :
print ( likeBtnTxt[5].get_attribute("aria-label"), "Pass like" )
추가 수정 코드
구독자님께서 친절히 피드백을 주셨고, 아래와 같이 추가 수정 코드 공유드립니다.
문제점은 "그런데 저는 비디오 타입 게시물에서 무조건 건너뛰는데 저만 그런걸까요? :(" 였고, 이미 수정해서 사용하고 있었던 내용이라 코드 만 복사해서 올립니다.
기존 코드 로직은 5번째 고정된 elements 만을 체크했는데, 게시물의 형태에 따라 좋아요를 판단하는 부분이 5번째에만 있지 않아 아래와 같이 반복문을 통해서 likeBtnTxt 전체를 검색하는 로직으로 수정하였다.
like_pass 라는 변수를 추가하여, 해당 값이 True 이면 좋아료를 누르지 않도록 조건문도 추가하였다.
like_list = browser.find_elements_by_xpath('//article//section/span/button')
likeBtnTxt = browser.find_elements_by_class_name('_8-yf5 ')
like_pass = False
for i in range ( len ( likeBtnTxt ) ) :
if likeBtnTxt[i].get_attribute("aria-label") == 'Unlike' :
like_pass = True
print ( likeBtnTxt[i].get_attribute("aria-label"), "Pass like" )
break
if like_pass == False :
like_list[0].click() #list 중 0번째 버튼을 선택
like_count += 1
print ("like count = ", like_count )
refresh_err = 0
'프로젝트 > 인스타그램 좋아요 봇' 카테고리의 다른 글
파이썬 인스타그램 좋아요 봇 만들기 #12 광고성 글 건너뛰기 (0) | 2020.10.29 |
---|---|
파이썬 인스타그램 좋아요 봇 만들기 #11 태그 검색 변경하기 (3) | 2020.10.21 |
파이썬 인스타그램 좋아요 봇 만들기 #9 xpath 찾기 (0) | 2020.10.05 |
파이썬 인스타그램 좋아요 봇 만들기 #8 페이지 새로고침 (1) | 2020.09.17 |
파이썬 인스타그램 좋아요 봇 만들기 #7 list index out of range (0) | 2020.09.14 |
댓글