음원추출 자동화 - [1]세팅, selenium으로 음원추출 후 저장

박병관·2022년 3월 3일
0
post-thumbnail

220302에 진행

이유/계획🤷

목표였던 웹과파이썬을 연결하여 웹에서 입력을 받고, 파이썬에서 처리에서 파이썬 부분을 먼저 완성하고 값만 입력 받으면 되도록 만들기를 계획했다

유튜브 음원추출 사이트를 변경했다 (변경한 웹 사이트)
음원 추출 사이트 추천 블로그 글를 통해 알게 되었고, 변경한 이유는 원래 선택한 음원 추출 사이트를 사용해 음원추출 자동화를 진행하던 중 광고때문에 제대로 요소들을 인식시키는데에 어려움이 있어서 광고를 중점으로 새로운 음원추출 사이트를 선택했다

과정💦

음 정말 세팅(설치, 적용)에 내가 약하다는걸 다시 알게되었다

세팅 한 과정은 간단하게 적어보자면(과정 더 알아보기)

1. selenium 설치

pip install selenium

2. 드라이버 설치(크롬, 버전확인 후 다운로드)

3. 드라이버를 연결

드라이버를 설치하고 연결 해 주어야 하는데, 크롬 드라이버가 저장된 경로를 입력해주면 된다
같은 폴더 내에 있다면 경로를 지정해주지 않아도 된다

from selenium import webdriver
driver = webdriver.Chrome() # 같은 폴더 내에 있어서 경로를 지정하지 않음

나는 이런 세팅하는 부분에서 어려워서 친구의 도움을 받았다

4. selenium 사용

selenium을 사용하기 위해 구글링 하다가 괜찮은 자료를 찾았다
(자료에 세팅하는 부분부터 사용하는 부분까지 보기 쉽게 나열되어 있다)


  1. 웹 사이트 열기
from selenium import webdriver
driver = webdriver.Chrome() # 크롬 브라우저 열기
driver.get('https://onlinevideoconverter.pro/ko/youtube-converter-mp3#') # 음원 추출 웹사이트 열기
  1. 웹 사이트 요소 선택
    선택은 요소들을 하나하나 선택하는 과정이라 선택하는 문법만 알면 큰 어려움은 없다
youtubeURL = input()
driver = webdriver.Chrome()
driver.get('https://onlinevideoconverter.pro/ko/youtube-converter-mp3#')

# id 로 선택
driver.find_element_by_id("texturl").send_keys(youtubeURL) # input에 입력
driver.find_element_by_id("convert1").click() # button을 클릭
  1. 막히는 부분에서 해결

해결한 문제상황🤗

엘리먼트가 바로 생기지 않아서 찾지 못함

나는 웹에서 버튼이 전의 과정이 끝난 후 생겨서 계속 driver.find... 로는 아래와 같이 element를 찾을 수 없는 상황이 생겼다

이 문제를 명시적으로 어떤 조건이 성립했을 때까지 기다렸다가 코드가 실행되는 Explicity wait을 사용해 아래와 같이 해결했다

from selenium import webdriver
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# youtubeURL = input()
youtubeURL = input()
driver = webdriver.Chrome()
driver.get('https://onlinevideoconverter.pro/ko/youtube-converter-mp3#')
driver.find_element_by_id("texturl").send_keys(youtubeURL)
driver.find_element_by_id("convert1").click()

# Explicity wait = 명시적으로 어던 조건이 성립될 때까지 기다림
wait = WebDriverWait(driver, 30)
wait.until(EC.element_to_be_clickable((By.ID,'download-720-MP4')))

# 기다린 후 id가 download-720-MP4인 엘리먼트가 발견되면 실행
driver.find_element_by_id("download-720-MP4").click()

while(1):   
    time.sleep(10)

다운로드를 하면 광고창이 뜸

또 다른 문제로는 다운로드를 할 때 광고 페이지가 뜨는 것이다
어차피 나는 음원추출 페이지 하나만 사용하기 때문에 광고 페이지를 삭제하기 위해 단순하게 첫 번째 페이지, 두 번째 페이지... 이런 선택자를 사용했다

# 1페이지로 이동
driver.switch_to.window(driver.window_handles[1])
# 페이지 닫기
driver.close()
# = 0번째 페이지만 남는다

해결하지 못한 문제상황🤕

다운로드 버튼이 어떤 이유에 따라 id가 달라짐

또 다른 문제로는 버튼의 id가 왜인진 정확히 모르겠지만(아마 음질에 따라?) download의 버튼 id가 달라져서 element를 찾을 수 없는 상황이 생겼다

어쩌면 가장 어려울 수 있는 문제 상황이다

이 문제는 일단 내가 ...720......360... 밖에 보지 못했기 때문도 있고, 확인 해본결과 처음에 의심했던 영상 길이에 따른 변화는 아니였다

그리고 일단... 못하겠다

검색도 여러 번 더 해봤지만 java자료는 조금 있고, 애초에 자료가 많이 없었다

selenium공식 문서에서 함수들을 찾아볼 수도 있겠지만 들인 시간에 비해 별로 이 부분은 정말 큰 문제가 되지 않을거 같기(대부분이 720) 때문에 추 후 영향에 따라 개선할거다

결과🏅

마지막 전체 코드를 이렇게 적는 이유는 내가 다른 사람의 블로그를 찾아 볼 때 부분부분만 있으면 이해가 어려웠고, 결국 전체 코드를 보며 이해를 할 수 있었기 때문이다

from xmlrpc.client import Boolean
from selenium import webdriver
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# youtubeURL = input()
youtubeURL = input()
driver = webdriver.Chrome()
driver.get('https://onlinevideoconverter.pro/ko/youtube-converter-mp3#')
driver.find_element_by_id("texturl").send_keys(youtubeURL)
driver.find_element_by_id("convert1").click()

# Explicity wait = 명시적으로 어던 조건이 성립될 때까지 기다림
wait = WebDriverWait(driver, 30)
wait.until(EC.element_to_be_clickable((By.ID,'download-720-MP4')))

driver.find_element_by_id("download-720-MP4").click()

driver.switch_to.window(driver.window_handles[1])
driver.close()

while(1):   
    time.sleep(10)

일단 현제 유튜브 url입력, 음원추출 후 저장의 과정이 된다

앞으로 할 일은 이 저장된 파일을 다운로드 폴더에서 다른(mp3)폴더로 이동시키는 것이고, 짜잘한 버그에 대해 생각하는 것이다

느낀점🙃

  • 이렇게 프로젝트의 진행 과정을 적극적으로 적는건 처음인데, 느낀점은 진행을 하면서 적으려니 뭔가 개발에 속도가 끊길 수 있고, 적는데 급급해질 것 같아서 적으면서 나에게 "이건 오늘 일을 하고 작성하며 복습을 하는 거야" 라는 말을 생각했다, 앞으로도 적는데에 만 급급해지지 말자

  • 적으니깐 좋은 점은 확실히 오늘 한 걸 다시 정리하며 복습할 수 있고, 내가 앞으로 해야할 것들을 생각할 수 있어서 확실히 공부, 동기부여, 집중력 이 조금은 더 생기는 것 같다

profile
괴물신인

0개의 댓글