
틴더에서 하루 스와이핑 최대치에 다다를때까지 자동으로 모든 사람을 like하는 봇
(실습을 위해 dislike로 변경)
🔍 유의 사항
- 실습용 프로필 사진 다운
(새로고침을 할 때마다 머신러닝으로 생성한 가상 인물 사진을 보여주는 사이트)- 구글 계정 또는 페이스북 계정으로 로그인(페이스북이 좀 더 간단한 절차)
- 전화번호 인증은 직접 틴터에 로그인해서 해야 한다(최초 1회만)
🔍 유의 사항
- 틴더 홈페이지에서 로그인 클릭 후 페이스북 계정으로 로그인 클릭
- 로그인 팝업창을 켜기
NoSuchElementException예외가 뜰 경우:
버튼 클릭 사이에 약간의 지연을 추가하여 새 요소가 로드되는 데 걸리는 시간 벌기- XPath를 사용하면 더 쉬움
🔍 유의 사항
- 상위 창(팝업창)으로 포커스 전환
- base_window = driver.window_handles[0] : 첫 번째 창(기본)의 인덱스는 0
- popup_window = driver.window_handles[1] : 새 창의 인덱스는 1 증가
- driver.switch_to.window( popup_window ) : 괄호 안의 창으로 포커스 전환
- driver.window_handles : 모든 창을 리스트로 반환
- driver.title : 현재 포커스가 있는 창 확인
- 로그인 창에서 아이디와 비밀번호 입력 후 로그인
- 정상적으로 로그인되어 팝업창이 없어지면 다시 원래 창으로 포커스 변경
🔍 유의 사항
- 위치정보 수집 팝업 : 허용
- 알림 전송 여부 : 비허용
- 쿠키 수집 여부 : 동의
🔍 유의 사항
- 웹에서는 스와이핑 대신 패스 버튼을 누를 수 있음
- 다음 버튼을 누르기 전에 최소 1초 이상 지연시간을 넣어야 함
⌨️ main.py 최종
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
# 요소 지정 없이 키보드를 누르기 위해 임포트
from selenium.webdriver.common.action_chains import ActionChains
chrome_options = webdriver.ChromeOptions()
chrome_options.add_experimental_option("detach", True)
driver = webdriver.Chrome(options=chrome_options)
driver.get("https://tinder.com/")
# 로그인 버튼 클릭
time.sleep(2)
login = driver.find_element(By.XPATH, '//*[@id="q1029118820"]/div/div[1]/div/main/div[1]/div/div/div/div/div/header/div/div[2]/div[2]/a/div[2]/div[2]')
login.click()
# 페이스북 로그인 버튼 클릭
time.sleep(2)
fb_login = driver.find_element(By.XPATH, '//*[@id="q-699262256"]/div/div/div/div[1]/div/div/div[2]/div[2]/span/div[2]/button/div[2]/div[2]')
fb_login.click()
# 로그인 팝업창으로 포커스 변경
time.sleep(2)
base_window = driver.window_handles[0]
fb_login_window = driver.window_handles[1]
driver.switch_to.window(fb_login_window)
# 페이스북 로그인하기
email = driver.find_element(By.XPATH, '//*[@id="email"]')
email.send_keys("이메일")
password = driver.find_element(By.XPATH, '//*[@id="pass"]')
password.send_keys("비밀번호")
password.send_keys(Keys.ENTER)
continue_button = driver.find_element(By.XPATH, '/html/body/div[1]/div/div/div/div/div/div/div[1]/div[3]/div/div/div/div/div/div/div[2]/div/div/div[1]/div/div/div/div[1]/div/div/div/div')
continue_button.click()
# 틴더 창으로 다시 포커스 변경
driver.switch_to.window(base_window)
# 팝업창 닫기
time.sleep(3)
allow_location_button = driver.find_element(By.XPATH, '/html/body/div[2]/div/div[1]/div/div/div[3]/button[1]')
allow_location_button.click()
time.sleep(3)
notifications_button = driver.find_element(By.XPATH, '/html/body/div[2]/div/div[1]/div/div/div[3]/button[2]')
notifications_button.click()
time.sleep(3)
cookies = driver.find_element(By.XPATH, '/html/body/div[1]/div/div[2]/div/div/div[1]/div[1]/button')
cookies.click()
# diskike 스와이핑하기
time.sleep(100)
actions = ActionChains(driver)
for n in range(10):
time.sleep(1)
try:
# 틴더를 홈에 추가 팝업이 뜰 경우 닫기
add_home = driver.find_element(By.XPATH, '/html/body/div[2]/div/div/div[2]/button[2]')
add_home.click()
except:
# ← 방향키로 dislike 스와이핑하기
actions.send_keys(Keys.ARROW_LEFT).perform()
버튼을 누르는 방식으로 할 경우 첫 번째 스와이핑만 적용되는 현상이 생겨 키보드 ← 키로 변경
try로 팝업을 닫는 것을 시도하고 except로 스와이핑 진행
(클릭이 아니어서 중간에 틴더를 홈에 추가하라는 팝업이 떠도 에러가 발생하지 않기 때문)