본문 바로가기

개발일지

페이스북 자동 친구추가 프로그램 개발일지 [주문제작]

2020년 12월 20일 시작

네이버 블로그를 시작하고 블로그에서 처음으로 맡은 주문제작이다

오늘은 페이스북에서 자동 친구 추가하는 프로그램을 개발해보겠다

 

로그인이 필요하니 편리함을 위해 셀레늄과 조건을 맞추기 위해 beautifulsoup를 사용한다

 

친구 추가는 한국사람 추가한다

친구신청이 한도에 제한될 경우 신청한 지 1일이 지난 신청은 취소한다

로그인을 여러계정으로 할 수 있도록 한다

 

이번에는 로그인 과정은 생략하도록 하겠다

로그인 과정은 저번 네이버 관련 포스팅과 같으니 참고하면 좋을 듯하다

네이버 지식인 자동 답변 개발일지 << 클릭

 

네이저 지식인 질문 자동 답변 프로그램 개발일지

2020년 12월 15일 시작 지식인 질문 프로그램을 제작 도중 일단은 질문에 답을 하는 프로그램을 제작해보기로 했다 ​ 일단 생각한 로직은 키워드로 검색 후 검색된 제목을 찾아 제목에 특정 단어

wolharu.tistory.com

바로 친구 추가 페이지로 이동해서 html 코드를 분석해보도록 한다

html코드 분석

button으로 되어 있다

우리는 class명이나 xpath를 가져와서 사용하면 될 것 같다

xpath는 단일 element를 선택하는데 용이함으로 나는 class명을 사용하도록 하겠다

while True:
    driver.find_element_by_class_name('_54k8._52jg._56bs._26vk._40x9._8yzt._56bu').click()
    time.sleep(random.randint(1,5))

이렇게만 해주면 정말 간단하게 친구 추가를 할 수 있을 것이다

항상 이론은 완벽하다

한번 테스트를 위해 구동해보도록 한다

아쉽게도 오류를 내뿜는다

ElementNotInteractableException: Message: element not interactable (Session info: chrome=87.0.4280.88)

element를 찾을 수 없는 것 같으니 생각을 해본다

애초에 find_element_by_class_name은 단일은 선택하는 함수다

그렇기에 이미 한번 신청 버튼을 누르면 class명이 달라질 수 있다

find_elements_by_class_name을 사용하면 class명에 해당하는 element를 리스트 형식으로 반환한다

for idx in range(0,100):
    driver.find_elements_by_class_name('_54k8._52jg._56bs._26vk._40x9._8yzt._56bu')[idx].click() 
    time.sleep(random.randint(1,5))

이렇게 바꿔서 해보도록 했다

다시 런~!

테스트 구동

정상적으로 잘되는 것을 확인할 수 있다

좀 더 테스트를 위해 더 구동을 해보겠다

 

역시나 프로그램에 변수가 없으면 안 되듯 바로 예외처리를 해줘야 한다

아는사람 팝업창

이런 팝업창이 뜬다

try문을 사용하여 친구 추가를 하면 될 것 같다

try문은 except와 같이 사용할 수 있는데

try는 오류가 날 것 같은 구문에 사용하면 된다

나중에 자세히 알아보도록 하자

 

조금 더 확실한 결과물을 위해 조금 더 테스트를 해보도록 한다

 

결과물을 보여드리고 차후 수정을 받도록 한다

클라이언트가 팝업창이 뜨면 대기시간을 갖는 것이 좋다고 한다

그래서 다른 계정으로 접속하도록 한다

역시나 로그인하는 것은 생략하니 전 포스팅들을 참고하길 바란다

 

클라이언트가 이렇게 마구잡이로 친구 추가를 하게 되면 계정이 비활성화된다고 한다

몇 가지 부분을 알려주어 그에 맞춰 수정해주고 파일을 전달해주었다

 

 

+ beautifulsoup를 이용해서 한글 사용자만 친구 추가하도록 한다

대략적인 전체 코드

import time 
from selenium import webdriver 
import random 

driver = webdriver.Chrome('chromedriver') 
driver.get('https://m.facebook.com/profile.php?')

for idx in range(0,100): 
    try: 
        # 친구추가하기
        driver.find_elements_by_class_name('_54k8._52jg._56bs._26vk._40x9._8yzt._56bu')[idx].click() 
        time.sleep(random.randint(1,5))
    except: 
    	# 친구추가 팝업창
        try: driver.find_element_by_class_name('_54k8._52jg._56bs._26vk._56b_._56bu').click() 
        except: pass

끝.