====== EBS 외국어 채널의 녹음 ====== EBS의 경우 URL 주소가 명시적으로 나와 있지 않고, 플래시를 활용하도록 되어 있다. 그러므로 pyvirtualdisplay, selenium, chrome-driver를 활용하여 자동으로 웹브라우저를 만들면 이를 커버할 수 있다. pyvirtualdisplay는 xvfb를 필요로 하니 설치하도록 한다. ===== 셀레니움 설치 ===== 셀레니움 홈페이지에서 [[http://docs.seleniumhq.org/download/|standalone server]]를 다운로드 받는다. 이것을 아래처럼 하면 실행할 수 있다. 셀레니움 standalone server는 직접적인 관계가 없다. 실행시키지 않아도 상관 없다. java -jar selenium-server-standalone-3.0.1.jar 실행하기 전 크롬 드라이버와 크롬 웹브라우저를 설치하도록 한다. 구글 크롬을 써도 되지만 오픈소스 버전인 크로미움을 사용해도 무방하다. 단, 이 경우 크로미움의 실행 파일 이름을 '/usr/bin/google-chrome'으로 링크를 걸자((https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver)). 크롬 드라이버는 [[https://sites.google.com/a/chromium.org/chromedriver/downloads|여기]]서 받을 수 있다. 압축을 풀면 바이너리 파일이 있는데 시스템 패스를 잡아서 실행할 수 있도록 한다. ''chromedriver --version''명령을 실행하여 headless 서버에서 문제없이 실행되는지 체크한다. 필요한 라이브러리가 부족할 수도 있다((http://stackoverflow.com/a/40585051)). 또한 크롬 드라이버는 레포지토리에서 받을 수 있으나, 이 경우 플래시 플러그인이 로딩되지 않아 전혀 필요없다. ===== 스크립트 실행 ===== 프로토타입 스크립트를 생성하였다. 저장소는 [[ https://bitbucket.org/changwoo/ebsplayer|이곳]]이다. ===== 플래시 실행 관련 ===== 우선은 브금저장소 같은 플래시를 사용하는 곳에서 플래시를 잠시 빌리도록 해 보자. 이를 테면, 브라우저에서 제대로 음성이 출력되는지 확인해보자. 적절한 음악 파일을 올려둔 다음, 이것을 웹브라우저로 접근해보자. xvfb로 만든 경우라도 기능이 동일하기 때문에 플래시나 음성이 제대로 출력되어야 한다. 크롬 브라우저는 pepperflashplugin-nonfree를 이용한다. 그리고 이것을 깐다 하더라도 플래시 플레이어가 당장 실행되지는 않는다. flashplayer는 더 이상 크롬 브라우저에서 제공되지 않으므로 별도로 설치해야 한다 우분투의 경우 캐노니컬 파트너 저장소를 통해 다운로드 받을 수 있다. sudo vi /etc/apt/sources.list # deb http://archive.canonical.com/ubuntu xenial partner 이 부분의 주석을 해제한다. sudo apt update sudo apt install adobe-flashplugin 그리고 /etc/chromium-browser/default의 내용을 다음처럼 만든다. # Default settings for chromium-browser. This file is sourced by /bin/sh from # /usr/bin/chromium-browser # Options to pass to chromium-browser CHROMIUM_FLAGS="--disable-new-tab-first-run --enable-user-scripts" # part for pepperflashplugin-nonfree : begin flashso="/usr/lib/pepperflashplugin-nonfree/libpepflashplayer.so" if [ -f $flashso ] then flashversion=`strings $flashso|grep ^LNX|sed -e "s/^LNX //"|sed -e "s/,/./g"` CHROMIUM_FLAGS="$CHROMIUM_FLAGS --ppapi-flash-path=$flashso --ppapi-flash-version=$flashversion" fi # part for pepperflashplugin-nonfree : end 그 다음 (아마 세션을 다시 시작하는 것이 좋을 것이다) 이제 간단하게 테스트를 해 보자. from pyvirtualdisplay import Display from selenium import webdriver # 가상 디스플레이 생성 display = Display(visible=0, size=(800, 600)) display.start() # 크롬 생성, 크롬 플러그인 상태를 확인 driver = webdriver.Chrome() driver.get('chrome://plugins') driver.save_screenshot('') # 플래시 테스트 페이지에서 상태 확인 driver.get('<플래시테스트URL>') driver.save_screenshot('') driver.execute_script("window.scrollTo(0, document.body.scrollHeight/5);") # 정리 driver.quit() display.stop() 이렇게 하면 다음처럼 플러그인과 플래시의 실행 준비가 되어 있어야 한다. {{ :project:ebsplayer:flash.png?nolink |}} {{ :project:ebsplayer:plugins.png?nolink |}}