본문 바로가기
프로그래밍/Python

유튜브 "광고 건너뛰기" 자동 실행 (feat. 파이썬 웹크롤링)

by 머니테크리더 2023. 4. 28.
반응형

유튜브 광고 건너뛰기 자동 실행 대표 이미지
유튜브 광고 건너뛰기 자동 실행 대표 이미지

🔖 INDEX

     

     

    무료로 유튜브를 이용하는 사용자들은 처음 영상을 시작하거나, 일정 시간 영상을 시청한 다음 광고가 발생하는 것을 볼 수 있습니다. 유튜브에서는 광고를 5초 시청 후에는 광고 건너뛰기 버튼이 활성화되며, 나머지 광고를 시청하지 않고 영상을 바로 볼 수 있는 기능을 제공합니다. 여기서는 해당 버튼이 활성화되었을 때 바로 자동으로 버튼을 눌러 영상을 볼 수 있게 하는 기능을 파이썬을 사용해서 개발해보도록 하겠습니다.

     

    실행 파일 사용 방법

    유튜브 "광고 건너뛰기"를 자동 실행할 수 있는 실행 파일을 아래에서 다운로드 할 수 있습니다. 해당 실행파일이 동작하려면 크롬 브라우저가 사전 설치 되어 있어야 합니다. 

    Youtube_autoadskip.zip
    12.21MB

    다운로드한 후 압축을 풀고나서, Youtube_autoadskip.mp4 파일의 확장자를 Youtube_autoadskip.exe로 변경합니다. 

     

    혹시, 아래와 같은 에러 메시지가 나타나면서 실행되지 않는다면, 

    파일에 바이러스 또는 기타 사용자 동의 없이 설치된 소프트웨어가 있기 때문에 작업이 완료되지 않았습니다.

     

    다음 아래 글을 참조해 주시기 바랍니다. 

     

    "파일에 바이러스 또는 기타 사용자 동의 없이 설치된 ..." 바로 해결

    최근 컴퓨터 사용자들은 다양한 프로그램과 소프트웨어를 이용하며 일상 생활을 보다 편리하게 만들고 있습니다. 그러나 때로는 우리가 필요한 실행 파일이나 압축 파일을 다운로드하여 사용

    moneylogging.tistory.com

     

    파이썬을 이용한 프로그램 개발

    Visual Studio 환경에서 파이썬을 사용하는 방법과 라이브러리 모듈을 import 하는 자세한 방식은 아래 글을 참고해주시기 바랍니다. 

     

    생초보도 할 수 있는 파이썬 웹 크롤링 - 웹페이지 정보 추출 #1

    주로 Visual Studio C++ 언어를 다루던 필자가 파이썬으로 전환하게 되면서, 프로그래머로서 새로운 언어를 습득하는 필요성을 느꼈습니다. 이번 글에서는 동일한 상황에 처한 독자들을 위해 파이썬

    moneylogging.tistory.com

     

     

    먼저, 파이썬의 Selenium 웹 드라이버 라이브러리를 사용하여 유튜브 홈페이지를 실행하는 코드를 작성하겠습니다.

    driver = webdriver.Chrome()
    url = "https://www.youtube.com/"
    driver.get(url)

    위의 코드가 정상적으로 작동하려면, 다음과 같은 라이브러리와 모듈이 import 되어야 합니다.

    from selenium import webdriver

    이러한 라이브러리를 사용하려면 먼저 Selenium 패키지를 설치해야 합니다. 설치 방법은 다음과 같습니다

    pip install selenium

    아래와 같이 XPath를 사용하여 웹페이지에서 광고 건너뛰기 버튼의 element 정보를 가져옵니다.

    elem_adskip = driver.find_element(By.XPATH, '/html/body/ytd-app/div[1]/ytd-page-manager/ytd-watch-flexy/div[5]/div[1]/div/div[1]/div[2]/div/div/ytd-player/div/div/div[18]/div/div[3]/div/div[2]/span/button/div')

    광고 건너뛰기 버튼은 항상 나타나지 않고, 광고가 시작될 때만 등장하기 때문에, 1초마다 버튼이 활성화되었는지 확인하고, 만약 활성화되면 클릭할 수 있는 알고리즘을 설계하였습니다. 이를 구현하기 위해 아래와 같이 코드를 작성할 수 있습니다.

    # 광고 건너뛰기 버튼이 나타날 때까지 기다리고 클릭하는 함수
    def click_skip_ad_button():
        try:
            skip_ad_button = driver.find_element(By.XPATH, '/html/body/ytd-app/div[1]/ytd-page-manager/ytd-watch-flexy/div[5]/div[1]/div/div[1]/div[2]/div/div/ytd-player/div/div/div[18]/div/div[3]/div/div[2]/span/button/div')  
    
            # 광고 건너뛰기 버튼은 '광고 건너뛰기' 라는 텍스트 속성을 갖고 있고, 
            # '5, 4, 3, 2, 1' 카운터는 텍스트 속성을 갖고 있지 않아 아래와 같이 광고 건너뛰기 버튼일 때 클릭하도록 구현
            if skip_ad_button.text != "": 
                skip_ad_button.click()
                print("Click Ad Skip Button!")
            else:
                print("Ad Counter ...")
         
        # try 문에서 element 정보를 가져오지 못하면 광고 건터뛰기 버튼이 없기 때문에 Exceptional 처리를 함.
        except NoSuchElementException:
            print("No Ad.")
            pass
    
    # 광고 건너뛰기 버튼을 찾아서 클릭하는 작업을 무한 반복
    while True:
        click_skip_ad_button()
        time.sleep(1)

     

     

    이 코드는 Selenium 웹 드라이버를 이용해 유튜브에 접속한 후, 무한 루프를 돌며 1초마다 광고 건너뛰기 버튼이 활성화되었는지 확인하고, 활성화되면 클릭하는 작업을 수행합니다. 이렇게 하면 광고가 나타날 때마다 자동으로 건너뛸 수 있습니다.

     

    참고로, 위의 코드를 실행하는 경우 다음과 같은 문제가 발생할 수 있습니다.

     

    위의 문제는 운영 상에 크게 문제가 되지 않지만 에러 내용을 남긴 채 패스하는 것은 개발자의 자세(?)가 아니므로 위의 에러를 없애는 방안에 대해서 방법을 강구했습니다. 아래와 같은 옵션을 추가하면 위의 에러를 삭제할 수 있습니다.

    from selenium.webdriver.chrome.options import Options
    
    options = webdriver.ChromeOptions()
    options.add_experimental_option("excludeSwitches", ["enable-logging"])

     

    최종 소스코드는 아래와 같습니다.

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.chrome.options import Options
    from selenium.common.exceptions import NoSuchElementException
    import time
    
    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_experimental_option("excludeSwitches", ["enable-logging"])
    
    driver = webdriver.Chrome(options=chrome_options)
    url = "https://www.youtube.com/"
    driver.get(url)
    
    def click_skip_ad_button():
        try:
            skip_ad_button = driver.find_element(By.XPATH, '/html/body/ytd-app/div[1]/ytd-page-manager/ytd-watch-flexy/div[5]/div[1]/div/div[1]/div[2]/div/div/ytd-player/div/div/div[18]/div/div[3]/div/div[2]/span/button/div')  
            
            if skip_ad_button.text != "": 
                skip_ad_button.click()
                print("Click Ad Skip Button!")
            else:
                print("Ad Counter ...")
                        
        except NoSuchElementException:
            print("No Ad.")
            pass
    
    while True:
        click_skip_ad_button()
        time.sleep(1)

    소스코드 전문은 아래에서 다운로드 받으실 수 있습니다.

    utube_auto_adskip_source.txt
    0.00MB

     

     

    댓글