[python] 유튜브 광고 자동 넘기기
유튜브를 보다 보면 광고가 띄워지고 5초 뒤 광고를 넘길 수 있도록 되어있다. 물론 못 넘기는 광고들도 몇 가지 있지만.. 그런데 이런 광고가 뜰 때마다 버튼으로 일일이 넘기기 매우 매우 귀찮다. 영상을 보고 있었다면 클릭을 통해서 넘길 수 있지만, 노래 플레이리스트를 듣고 있어서 광고 넘기기 버튼을 누르기 힘들거나 그냥 클릭조차 귀찮을 때가 있다.
광고를 넘기는 방법에는 두 가지 방법이 있다. 내가 알고 있는 선에서는
1. pyautogui 모듈을 사용해서 마우스를 직접 제어하여 클릭하기
2. selenium 모듈을 사용해서 소프트웨어 상에서만 클릭하기
각자 장단점이 있다. ( 두 모듈 모두 pip install을 통해 인스톨 해야 한다. )
먼저, 1번은 구현이 쉽다. 그리고 아는게 적어도 된다. 충분히 직관적이기 때문에 코드 또한 간단히 짤 수 있다. 단점으로는 광고가 떠있는 동안은 마우스를 사용할 수 없고, 인식률이 가끔 안 좋을 때가 있다.
다음으로, 2번은 selenium 사용법에 대해 알고 있어야 되기 때문에 좀 복잡할 수 있다. 그래도 광고 넘기기 버튼이 있다면 항상 빠르고 정확하게 넘길 수 있다. 또한 유튜브 창이 가려져 있어도 작동한다.
두 가지 코드를 모두 살펴보겠다.
1. pyautogui 사용
import pyautogui
while True:
location = pyautogui.locateCenterOnScreen('youtube_ad.png', confidence=0.7, grayscale = True)
if not location1 == None:
pyautogui.moveTo(location[0], location[1], 0.5)
pyautogui.click()
먼저, 이 코드를 사용하기 위해서는 샘플 사진 'youtube_ad.png'라는 사진이 필요하다. 이 사진은 광고 넘기기 버튼이다.

이 버튼은 불투명하기 때문에 뒤의 광고가 무엇이냐에 따라 저 버튼의 색이 약간씩 다르게 보인다.
pyautogui.locateCenterOnScreen 함수를 통해 저 사진이 화면에 어디에 위치했는 지 찾을 수 있다. 첫번째 파라미터에는 찾을 대상 사진, 두번째 파라미터 cofidence에는 사진과의 일치도, 세번째 파라미터 grayscale은 흑백으로 구분할지를 의미한다. 정확도를 높이기 위해 흑백으로 구분하며 70%정도 일치하는 것들을 찾도록 하였다. 그리고 찾았다면 마우스를 그 좌표로 움직여서 클릭하도록 하였다.
매우 직관적이다. 버튼 찾기 -> 버튼 좌표 알아내기 -> 좌표로 마우스 포인터 움직이기 -> 클릭하기
2. selenium 사용
from selenium import webdriver
import time
browser = webdriver.Chrome("chromedriver.exe")
browser.maximize_window()
url = "https://www.youtube.com/"
browser.get(url)
while True:
time.sleep(1)
adelems = browser.find_elements_by_class_name('ytp-ad-skip-button-container')
if adelems:
adstyle = adelems[0].get_attribute('style')
if not 'none' in adstyle:
adbutton = adelems[0].find_elements_by_tag_name('button')
adbutton[0].click()
selenium 모듈은 웹 크롤링을 위한 모듈이다. 여기서는 다른 방향으로 사용했긴 하지만.. 기회가 된다면 관련 글을 올려보도록 하겠다. 어쨌든, selenium 모듈을 사용한다면 소프트웨어를 통해 동적으로 웹브라우저를 조종할 수 있다.
먼저 selenium을 사용하기 위해서는 chrome driver가 필요하다.
https://chromedriver.chromium.org/downloads
ChromeDriver - WebDriver for Chrome - Downloads
Current Releases If you are using Chrome version 111, please download ChromeDriver 114.0.5735.16 If you are using Chrome version 113, please download ChromeDriver 113.0.5672.63 If you are using Chrome version 112, please download ChromeDriver 112.0.5615.49
chromedriver.chromium.org
이 사이트에 접속하여 자신의 크롬 버젼에 맞는 chrome driver를 다운로드 받고 압축을 푼 뒤 chromedriver.exe을 코드와 같은 경로에 위치시킨다.
find_element_by_... 함수들은 모두 HTML에서 element를 찾아주는 함수이다. 유튜브에서 광고가 뜬 화면에서 광고 건너뛰기 버튼에 해당하는 element를 찾고, 그 버튼이 존재하는지 확인한 뒤 존재한다면 버튼을 클릭하도록 한다.

HTML에 대해 조금만 알아본다면 이해가 될 것이다. 유튜브를 보다가 광고가 뜨면 영상을 멈추고 개발자모드(ctrl+shift+i)를 통해 저런 화면을 띄울 수 있다. ctrl+shift+c를 누르고 광고 건너뛰기 버튼에 마우스를 가져다 대면 HTML에서 저 버튼의 위치를 확인할 수 있다. 광고 건너뛰기 버튼은 button 태그, class는 ytp-ad-skip-button ytp-button이고, 이 element를 클릭하면 저 버튼이 클릭되며 광고가 넘어가게 된다.
이렇게 두 가지 방법으로 유튜브 광고를 자동으로 넘겨주는 프로그램을 만들어봤다. 이 코드들을 좀 더 응용한다면 더 다양하고 편리한 프로그램들을 만들 수 있다. selenium을 공부해서 웹크롤링과 소프트웨어로 웹사이트를 다루는 것을 공부해보기를 추천한다. 참고로 오늘 소개한 첫번째 방법과 두번째 방법 중에 더 멋있고 배울게 많은 두번째 방법을 추천한다.