====== 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 |}}