사용자 도구

사이트 도구


project:ebsplayer

EBS 외국어 채널의 녹음

EBS의 경우 URL 주소가 명시적으로 나와 있지 않고, 플래시를 활용하도록 되어 있다. 그러므로 pyvirtualdisplay, selenium, chrome-driver를 활용하여 자동으로 웹브라우저를 만들면 이를 커버할 수 있다.

pyvirtualdisplay는 xvfb를 필요로 하니 설치하도록 한다.

셀레니움 설치

셀레니움 홈페이지에서 standalone server를 다운로드 받는다. 이것을 아래처럼 하면 실행할 수 있다. 셀레니움 standalone server는 직접적인 관계가 없다. 실행시키지 않아도 상관 없다.

java -jar selenium-server-standalone-3.0.1.jar

실행하기 전 크롬 드라이버와 크롬 웹브라우저를 설치하도록 한다. 구글 크롬을 써도 되지만 오픈소스 버전인 크로미움을 사용해도 무방하다. 단, 이 경우 크로미움의 실행 파일 이름을 '/usr/bin/google-chrome'으로 링크를 걸자1). 크롬 드라이버는 여기서 받을 수 있다. 압축을 풀면 바이너리 파일이 있는데 시스템 패스를 잡아서 실행할 수 있도록 한다.

chromedriver –version명령을 실행하여 headless 서버에서 문제없이 실행되는지 체크한다. 필요한 라이브러리가 부족할 수도 있다2). 또한 크롬 드라이버는 레포지토리에서 받을 수 있으나, 이 경우 플래시 플러그인이 로딩되지 않아 전혀 필요없다.

스크립트 실행

프로토타입 스크립트를 생성하였다. 저장소는 이곳이다.

플래시 실행 관련

우선은 브금저장소 같은 플래시를 사용하는 곳에서 플래시를 잠시 빌리도록 해 보자. 이를 테면,

<html>
  <body>
    <embed src="http://player.bgmstore.net/LerTb" type="application/x-shockwave-flash" width="100%" height="180"></embed>
  </body>
</html>

브라우저에서 제대로 음성이 출력되는지 확인해보자. 적절한 음악 파일을 올려둔 다음, 이것을 웹브라우저로 접근해보자. 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('<path>')
 
# 플래시 테스트 페이지에서 상태 확인
driver.get('<플래시테스트URL>')
driver.save_screenshot('<path>')
 
driver.execute_script("window.scrollTo(0, document.body.scrollHeight/5);")
 
# 정리
driver.quit()
display.stop()

이렇게 하면 다음처럼 플러그인과 플래시의 실행 준비가 되어 있어야 한다.

project/ebsplayer.txt · 마지막으로 수정됨: 2016/11/19 07:14 저자 changwoo

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki