인스타 팔로워를 늘려봅시다.
지금 이순간에도 프로그램이 자동으로 돌아가며 팔로워를 높여주고 있습니다.
지난 시간에는...
※ 지난시간에는 간단히 개요 이후 로직들에 대해서 배워봤습니다.
자세히는 아래와 같죠.
인스타 파이썬 팔로워 , 조건에 따라 팔로우 하기
※ 지난시간까지 정리 ※
1. 인스타 페이지 접속
2. 인스타 로그인 하기
3. 해쉬태그로 검색하기
4. 최근게시물 클릭, 좋아요 누르기 (조건에 따라)
※ 개념
웹상 요소의 경로인 xpath , time.sleep 이란 개념을 배웠습니다.
전체 링크는 프로그램 제작 완료 후 다시 링크로 첨부하겠습니다. ^^
오늘 해볼 것은 팔로우 입니다.
일단 팔로우인지 아닌지를 판별하기 위한 로직을 세웁니다.
※ 오늘 해볼 것 ※
1. 조건에 따른 팔로우 이하 로직
- 팔로우가 아닌 경우에만 팔로우를 한다.
- 이후 계정에 접속하여 설정한 만큼 피드를 넘기며 좋아요를 누른다.
2. 위 1번을 끝내면 댓글을 남긴다.
- 맞팔해요 ~!! 처럼 선팔을 하면 맞팔을 하자라는 의미의 문구를 담아 상대피드에 남긴다.
1. 조건에 따른 팔로우
이제 조건에 따라 팔로우를 해야합니다.
그러려면 먼저 팔로우 여부를 먼저 웹에서 읽어야겠죠?
지난 번에 말씀드렸던 것과 같이 뭐가 되었든간에 웹도 요소로 이뤄져 있기 때문에
요소값을 찾기 위헤 xpath로 위치를 읽습니다.
- 팔로우 위치 요소 읽기
try:
followtf = driver.find_element_by_xpath("""/html/body/div[1]/div/div/div/div[2]/div/div/div[1]/div/div[3]/div/div/div/div/div[2]/div/article/div/div[1]/div/header/div[2]/div[1]/div[2]/button/div/div""")
## /html/body/div[1]/div/div/div/div[2]/div/div/div[1]/div/div[3]/div/div/div/div/div[2]/div/article/div/div[2]/div/div/div[1]/div/header/div[2]/div[1]/div[2]/button/div/div
except:
print("follow xpath exception 1")
try:
followtf = driver.find_element_by_xpath("""/html/body/div[1]/div/div/div/div[2]/div/div/div[1]/div/div[3]/div/div/div/div/div[2]/div/article/div/div[2]/div/header/div[2]/div[1]/div[2]/button/div/div""")
## /html/body/div[1]/div/div/div/div[2]/div/div/div[1]/div/div[3]/div/div/div/div/div[2]/div/article/div/div[2]/div/div/div[1]/div/header/div[2]/div[1]/div[2]/button/div/div
except:
print("follow xpath exception 2")
try:
followtf = driver.find_element_by_xpath("""/html/body/div[1]/div/div/div/div[2]/div/div/div[1]/div/div[3]/div/div/div/div/div[2]/div/article/div/div[2]/div/div/div[1]/div/header/div[2]/div[1]/div[2]/button/div/div""")
except:
print("follow xpath exception 3")
여기서 팔로우의 위치가 변화가 있기 때문에 try , except로 예외처리를 하는 과정을 거칩니다.
첫번째 try ... 에서 실패할 경우 프로그램이 종료되지 않고 2번째 except문에 들어가서 같은 과정을 거칩니다.
크게 3가지 종류로 파악했는데 디버깅하다보면 더 많은 수의 종류도 나옵니다.
가령 예를 들면 댓글 기능을 차단해버린 유저와 같은 예외 핸들링이라 인지하시면 쉽습니다.
어째뜬 팔로우에 대한 요소값을 찾고 요소값에 대한 text 값으로 반환합니다.
-팔로우 위치 요소에 대한 텍스트 값 반환
followtf.text 로 위의 요소값에서 .text에 해당하는 부분만 가져와 if 문으로 비교합니다.
팔로우가 아닌 경우에는 text 값이 팔로우라고 나타나기 때문에 아래처럼
followif.text == "팔로우" 인 경우에 로직을 실행해 줍니다.
그렇지 않은 경우에는 아래 else 문에서 "이미 팔로우 중입니다." 하고 이하 로직을 작성하면 됩니다.
팔로우가 아닌 경우에는 팔로우를 클릭하고 역시 xpath를 이용합니다.
해당 계정에 접속하여 좋아요를 누르고 댓글을 작성합니다.
2. 조건에 따른 팔로우 이하 로직
조건에 따라 팔로우를 했다면 계정을 클릭하여 좋아요를 눌러주고
사진에 개별적으로 접속해 추가 좋아요를 클릭한 뒤에 댓글처리까지합니다.
보통 이렇게 해놓으면 맞팔을 하는 경우가 70% 이상 성립됩니다 ^^
아래 코드에 주석으로 설명해놓겠습니다.
if followtf.text == "팔로우":
print("팔로우 대상")
driver.find_element_by_xpath("""/html/body/div[1]/div/div/div/div[2]/div/div/div[1]/div/div[3]/div/div/div/div/div[2]/div/article/div/div[2]/div/div/div[1]/div/header/div[2]/div[1]/div[2]/button/div/div""").click()
time.sleep(random.randint(5,8))
driver.find_element_by_xpath("""/html/body/div[1]/div/div/div/div[2]/div/div/div[1]/div/div[3]/div/div/div/div/div[2]/div/article/div/div[2]/div/div/div[1]/div/header/div[2]/div[1]/div[1]/div/div/span/a""").click()
time.sleep(random.randint(3,5))
#서버에서 봇으로 인식하는 것을 막기 위한 랜덤하게 딜레이 주기
inpicture = driver.find_elements_by_class_name('_aagw')
#사진 요소들에 대한 접근을 하기 위해 계정 내에 사진들에 대한 요소값을 받습니다.
if len (inpicture) == 0 or len(inpicture) ==1 :
print("등록된 사진이 한장이거나 없습니다.")
#사진이 한장 또는 없으면 더이상 처리할 작업이 없음으로 그냥 넘어가줍니다.
else:
# 피드에 사진이 1장이상인 경우 좋아요를 클릭해줘야합니다.
# 따라서 아래 처럼 로직을 생성하고 우리가 지난 시간에 만든 로직과 같이
# 좋아요를 클릭해줍니다.
inpicture[1].click()
for i in range(0,3):
html = driver.page_source
soup = BeautifulSoup(html,'html.parser')
user_name_list = []
time.sleep(2)
time.sleep(2)
print("대기상태")
time.sleep(2)
likes = driver.find_elements_by_class_name("_ab6-")
likes_number_list = []
likedo = 0
for j in range(0,len(likes)):
if likes[j].get_attribute("aria-label") == "좋아요":
#print(j) #좋아요의 위치 넘버링
likes_number_list.append(j)
likedo = True
elif likes[j].get_attribute("aria-label") == "좋아요 취소":
likedo=False
break
html = driver.page_source
soup = BeautifulSoup(html,'html.parser')
for i in soup.find_all('span',attrs={"class":"_aap6 _aap7 _aap8"}):
user_name_list.append(i)
user_name_list[0].get_text()
time.sleep(2)
if likedo == True:
try:
time.sleep(3)
likes_number = int(likes_number_list[1])
time.sleep(3)
likes[likes_number].click()
print("you are clicked likes to --- %s" %user_name_list[0].get_text())
except:
time.sleep(3)
likes_number = int(likes_number_list[1])
time.sleep(3)
likes[likes_number].click()
print("you are clicked likes to --- %s" %user_name_list[0].get_text())
else:
print("you are already clicked likes")
time.sleep(3)
try:
driver.find_element_by_xpath("""/html/body/div[1]/div/div/div/div[2]/div/div/div[1]/div/div[3]/div/div/div/div/div[1]/div/div/div[2]/button""").click()
except:
driver.find_element_by_xpath("""/html/body/div[1]/div/div/div/div[2]/div/div/div[1]/div/div[3]/div/div/div/div/div[1]/div/div/div/button""").click()
# 좋아요의 기능을 다 수행했다면
# 메세지 기능입니다.
# 메세지 기능 역시 요소값을 받아와
# msg 라는 변수 값을 전달해 주고 게시의 요소값을 받아와 클릭해줍니다.
try:
msg = "피드 잘 보고 가요 ! 맞팔하면서 함께 운동자극 받고 싶습니다. 선팔하고 갑니다."
time.sleep(2)
driver.find_element_by_xpath("""/html/body/div[1]/div/div/div/div[2]/div/div/div[1]/div/div[3]/div/div/div/div/div[2]/div/article/div/div[2]/div/div/div[2]/section[3]/div/form/textarea""").click()
driver.find_element_by_xpath("""/html/body/div[1]/div/div/div/div[2]/div/div/div[1]/div/div[3]/div/div/div/div/div[2]/div/article/div/div[2]/div/div/div[2]/section[3]/div/form/textarea""").clear()
time.sleep(2)
#댓글작성
driver.find_element_by_xpath("""/html/body/div[1]/div/div/div/div[2]/div/div/div[1]/div/div[3]/div/div/div/div/div[2]/div/article/div/div[2]/div/div/div[2]/section[3]/div/form/textarea""").send_keys(msg)
time.sleep(2)
time.sleep(2)
#게시
driver.find_element_by_xpath("""/html/body/div[1]/div/div/div/div[2]/div/div/div[1]/div/div[3]/div/div/div/div/div[2]/div/article/div/div[2]/div/div/div[2]/section[3]/div/form/button""").click()
time.sleep(2)
time.sleep(2)
except:
#댓글기능 제한일 경우
print("exception , reply is rejeced according to user")
else:
print("이미 팔로우 중입니다.")
자 이제 알아서 팔로우가 되는지 한번 점검해보시면 됩니다.
하다보면 정말 다양한 경우가 있어서 지속 테스팅 후 디버깅이 필요합니다.
저도 지금 약 2시간 정도 굴리면서 문제가 없는지 지속적으로 확인하고 있습니다.
다음시간에는 전체로직을 순차적으로 배열하여 우리가 원하는 기능을 정상적으로 수행하는지
확인해 봅시다 !
'IT > python 응용' 카테고리의 다른 글
[파이썬 코딩] 인스타 팔로워 늘리기 무료 코드 #3. 해쉬태그 검색, 좋아요 클릭 해보기 (0) | 2022.08.03 |
---|---|
[파이썬 코딩] 인스타 팔로워 늘리기 프로그램 무료 #2. 로그인 및 페이지 접속 (0) | 2022.08.02 |
인스타 팔로워 천명 만들기 프로그램#1. 개요 및 로직 요약 (0) | 2022.08.01 |
파이썬 gui #3 - Qt 디자이너 기초 사용 (pyqt5) 2편 동작 연결하기(Signals/Slots) (0) | 2022.06.03 |
파이썬 gui #2 - Qt 디자이너 기초 사용 (pyqt5) 1편 layout 잡아보기 (0) | 2022.06.03 |
댓글