import time
import random # 랜덤 기능을 위해 random 모듈을 가져옵니다.
from selenium import webdriver
from seleniuhttp://m.webdriver.common.by import By
from seleniuhttp://m.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from seleniuhttp://m.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
# --- 설정 ---
# 1. [자동 생성] 방문할 URL 리스트를 for문을 이용해 자동으로 생성합니다.
BASE_URL = "https://kimchangmin02.tistory.com"
TARGET_URLS = [] # 비어있는 리스트를 먼저 만듭니다.
for i in range(1, 55): # 1부터 54까지의 숫자를 생성합니다.
# f-string을 사용해 숫자(i)를 URL 주소에 포함시켜 완전한 URL을 만듭니다.
url = f"{BASE_URL}/{i}"
TARGET_URLS.append(url) # 완성된 URL을 리스트에 추가합니다.
# 리스트가 잘 만들어졌는지 확인하고 싶다면 아래 주석을 해제하세요.
# print(TARGET_URLS)
WAIT_TIMEOUT = 10 # 타임아웃 대기 시간
print("사람처럼 행동하는 자동 '좋아요' 로봇을 시작합니다.")
print(f"총 {len(TARGET_URLS)}개의 게시물을 대상으로 작업을 반복합니다.")
print("프로그램을 종료하려면 이 창에서 Ctrl + C 를 누르세요.")
# --- 무한 루프 시작 ---
while True:
driver = None
try:
# 2. (반복) 생성된 URL 목록에서 방문할 페이지를 무작위로 선택합니다.
target_page = random.choice(TARGET_URLS)
print("\n--- 새로운 시도를 시작합니다 ---")
chrome_options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)
wait = WebDriverWait(driver, WAIT_TIMEOUT)
# 3. 선택된 URL로 이동합니다.
driver.get(target_page)
print(f"'{target_page}' 페이지로 이동했습니다.")
# 4. 페이지 로드 후, 사람처럼 랜덤하게 대기합니다. (글 읽는 척)
thinking_time = random.uniform(1.5, 4.5) # 1.5초 ~ 4.5초 사이의 랜덤한 시간
print(f"사람처럼 행동하기 위해 {thinking_time:.2f}초 동안 페이지를 둘러봅니다...")
time.sleep(thinking_time)
# 5. 모든 게시물에 적용 가능한 유연한 선택자로 '좋아요' 버튼을 찾습니다.
like_button_selector = "div[id^='reaction-'] button.btn_post"
print(f"CSS 선택자: '{like_button_selector}' 를 사용하여 '좋아요' 버튼을 찾습니다...")
like_button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, like_button_selector)))
# 6. '좋아요' 버튼을 클릭합니다.
print("성공: '좋아요' 버튼을 찾았습니다.")
like_button.click()
print("성공: '좋아요' 버튼을 클릭했습니다.")
# 7. 클릭 후, 바로 떠나지 않고 잠시 더 머뭅니다.
viewing_time = random.uniform(2, 5) # 2초 ~ 5초 사이
print(f"작업 완료! {viewing_time:.2f}초 더 머문 뒤 브라우저를 닫습니다.")
time.sleep(viewing_time)
except Exception as e:
print(f"실패: 작업 중 오류가 발생했습니다 - {e}")
error_sleep_time = random.uniform(5, 10)
print(f"오류 발생으로 인해 {error_sleep_time:.2f}초 대기합니다.")
time.sleep(error_sleep_time)
finally:
# 8. 한 사이클이 끝나면 브라우저를 종료하여 리소스를 정리합니다.
if driver:
print("브라우저를 종료합니다.")
driver.quit()
# 9. 다음 시도를 위해 긴 랜덤 휴식 시간을 가집니다.
break_time = random.uniform(10, 25) # 10초 ~ 25초 사이
print(f"\n다음 시도를 위해 {break_time:.2f}초간 충분히 휴식합니다...")
time.sleep(break_time)
'개발 > 자동화' 카테고리의 다른 글
| 티스토리 자동화 댓글 봇 만들기(이론) (#6) (13) | 2025.07.25 |
|---|---|
| 티스토리 좋아요 자동화 #5(가상 마우스가 움직이는거였음) (9) | 2025.07.25 |
| 티스토리 좋아요 자동화 #4(마우스 랜덤으로 움직이기에서 막힘) (17) | 2025.07.25 |
| 티스토리 좋아요 자동화 막힘,해결해보자 #2 (4) | 2025.07.25 |
| 티스토리 좋아요 자동화 코드 #1 (1) | 2025.07.25 |