오늘은 약간 재미있는 주제로 소개팅 어플인 틴더에서 좋아요를 자동으로 누르는 스와이핑 봇 프로그램을 만들어보았다.
셀레늄을 활용했으며, 페이스북으로 로그인할 때 팝업창으로 포커스를 전환하는 방법에서 애를 많이 먹었다.
아래 코드와 같이 driver.window_handles[인덱스] 를 통해서 팝업창과 메인창의 포커스를 전환할 수 있었다.
인덱스 부분에는 0이 메인창, 늘어날수록 새로 올라오는 팝업창 순서이다.
fb_login_window = driver.window_handles[1]
driver.switch_to.window(fb_login_window)
base_window = driver.window_handles[0]
driver.switch_to.window(base_window)
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
# 페이스북 로그인 정보facebook_id = "nkc9306"
facebook_password = "Rndcjf.01!"
# 구글 드라이버chrome_driver_path = "/Users/zzang/Desktop/chromedriver_win32/chromedriver.exe"
# 셀레늄 호출driver = webdriver.Chrome(executable_path=chrome_driver_path)
driver.get("<https://tinder.com/>")
# 로그인버튼 누르기time.sleep(2)
driver.find_element_by_xpath('//*[@id="t1836739397"]/div/div[1]/div/main/div[1]/div/div/div/div/header/div/div[2]/div[2]/a/span').click()
time.sleep(2)
driver.find_element_by_xpath('//*[@id="t108358321"]/div/div/div[1]/div/div/div[3]/span/div[2]/button/span[2]').click()
# 페이스북 팝업창으로 포커스 전환하기fb_login_window = driver.window_handles[1]
driver.switch_to.window(fb_login_window)
print(driver.title)
# 페이스북 계정으로 로그인time.sleep(2)
id = driver.find_element_by_xpath('//*[@id="email"]')
id.send_keys(facebook_id)
password = driver.find_element_by_xpath('//*[@id="pass"]')
password.send_keys(facebook_password)
password.send_keys(Keys.ENTER)
# 틴더 창으로 돌아오기time.sleep(10)
base_window = driver.window_handles[0]
driver.switch_to.window(base_window)
print(driver.title)
# 틴더 팝업창 닫기time.sleep(2)
popup_1 = driver.find_element_by_xpath('//*[@id="t1836739397"]/div/div[2]/div/div/div[1]/div[1]/button/span').click()
popup_2 = driver.find_element_by_xpath('//*[@id="t108358321"]/div/div/div/div/div[3]/button[1]/span').click()
time.sleep(2)
popup_3 = driver.find_element_by_xpath('//*[@id="t108358321"]/div/div/div/div/div[3]/button[1]/span').click()
# 좋아요 누르기for n in range(10) :
time.sleep(3)
print("called")
like_button = driver.find_element_by_css_selector('svg .Scale(.5)')
like_button.click()
driver.quit()