코딩/라즈베리파이

라즈베리파이 raspberry pi 에서 puppeteer 사용하기

드리프트 2021. 9. 24. 20:21
728x170

 

 

안녕하세요?

 

오늘은 라즈베리파이에서 puppeteer 실행하는 방법에 대해 알아보겠습니다.

 

일반적인 데스크톱이나 노트북에서는 다음과 같이 설치하는데요.

 

npm i puppeteer

 

puppeteer 패키지는 chrome을 다운로드해서 그걸 기반으로 웹페이지에 접속하는데요.

 

라즈베리파이에서 puppeteer를 실행해 보면 아래 스크린샷처럼 chrome이 없다고 나옵니다.

 

그래서 크롬이 없는 puppeteer 버전을 설치해야 하는데요.

 

그럼 puppeteer-core 버전을 설치해 볼까요?

 

npm i puppeteer-core

 

우리의 코드도 const puppeteer = require('puppeteer-core')로 바꿔주시기 바랍니다.

 

한번 실행해 볼까요?

 

역시나 크롬이 로컬 즉, 라즈베리파이 본체에 없다고 합니다.

 

 

만약 라즈베리파이를 X Windows로 실행하는 경우면 puppeteer 패키지로 잘 작동될 건데요.

 

그런데 우리가 라즈베리파이에서 사용하는 puppeteer의 목적은 원격에서 터미널로 접속해서 작업하려고 하는 거기 때문에 크롬이 실행될 수 없습니다.

 

그럼 정녕 라즈베리파이 터미널에서는 puppeteer를 실행할 수 없을까요?

 

아닙니다.

 

크롬은 chromium 오픈소스 파생 버전이기 때문에 라즈베리파이 OS에서 제공하는 chromium을 이용하면 됩니다.

 

라즈베리파이 OS에서는 바로 chromium-browser로 제공되기 때문에 이 버전을 설치하면 됩니다.

 

sudo apt install chromium-browser chromium-codecs-ffmpeg

 

chromium-browser 이랑 혹시 모를 동영상을 위해 ffmpeg codecs까지 설치해 줍시다.

 

설치가 완료되면 chromium-browser 가 잘 설치되어 있는지 아래처럼 확인해 보세요.

 

/usr/bin 폴더에 chromium-browser 실행파일로 잘 설치되어 있네요.

 

그럼 라즈베리파이에서 puppeteer를 실행시킬 완벽한 준비가 되었는데요.

 

다시 한번 node main.js를 실행해 볼까요?

어!  이상하게 아까랑 같은 에러입니다.

 

왜일까요? chromium-browser 도 설치했는데 말입니다.

 

그 이유는 바로 puppeteer-core 패키지가 default로 chrome을 실행시키기 때문입니다.

 

그래서 puppeteer-core 패키지를 실행할 때 chromium-browser를 지정해서 실행해야 합니다.

 

어떻게 할까요?

 

puppeteer github api를 뒤져보겠습니다.

 

 

바로 executablePath입니다.

 

A path where Puppeteer expects to find the bundled browser.이라고 되어 있습니다.

 

즉, executablePath로 우리의 chromium-browser 경로를 지정하면 됩니다.

 

코드를 보겠습니다.

const puppeteer = require("puppeteer-core");

const browser = await puppeteer.launch({executablePath : '/usr/bin/chromium-browser'});

const page = await browser.newPage();

await page.goto("https://www.daum.net", { waitUntil: "networkidle2" });

puppeteer를 launch 할 때 executablePath를 지정해서 실행하면 됩니다.

 

이상입니다.

그리드형