[Puppeteer] evaluate() 함수에 변수 전달하기[Puppeteer] evaluate() 함수에 변수 전달하기
Posted at 2019. 9. 30. 19:49 | Posted in Node.js/Puppeteer참고 : https://code-examples.net/ko/q/2bf409f
■ evaluate( ) 함수에 변수 전달하기
이전 [Puppeteer] 퍼펫티어를 이용한 CRAWLING 작업 포스팅에서
티스토리 로그인을 하는 예제를 조금 수정하여 작업을 진행한다.
해당 포스팅에서는 자바스크립트의 코드를 사용 할 수 있게 해주는
evaluate( ) 함수가 존재하고,
해당 evaluate( ) 함수에 변수값을 사용하는데 있어 아래와 같이 사용 한 경우 에러가 발생하였다.
puppeteer_evaluate.js |
const puppeteer = require("puppeteer"); // 로그인 SUBMIT 기능 const elementHandle = await page.waitFor( "input" ); await elementHandle.press( "Enter" );
await delay(5000);
/* 로그인이후 방문 기록 데이터를 콘솔에 띄워본다. */ const emToDay = await page.waitFor( "div.box_blog > dl.count_visitor:nth-child(1) > dd" ); const txtToDay = await page.evaluate( emToDay => emToDay.textContent, emToDay ); console.log("-. 오늘 방문자 수", txtToDay);
const emYesterDay = await page.waitFor( "div.box_blog > dl.count_visitor:nth-child(2) > dd" ); const txtYesterDay = await page.evaluate( emYesterDay => emYesterDay.textContent, emYesterDay ); console.log("-. 어제 방문자 수", txtYesterDay); const emCumulativ = await page.waitFor( "div.box_blog > dl.count_visitor:nth-child(3) > dd" ); const txtCumulativ = await page.evaluate( emCumulativ => emCumulativ.textContent, emCumulativ ); console.log("-. 누적 방문자 수", txtCumulativ);
|
# 에러 출력
evaluate( ) 함수 이기 때문에 해당 함수내에 값을 전달할려면
다른 함수들과 마찬가지로 전달할 값을 오버라이딩 해서 매개변수값을 전달해 주어야 한다.
puppeteer_evaluate.js |
const puppeteer = require("puppeteer"); // 함수내에 매개변수를 지정해준다. await page.evaluate(( { magicId, magicPw } ) => { // 로그인 SUBMIT 기능 const elementHandle = await page.waitFor( "input" ); await elementHandle.press( "Enter" );
await delay(5000);
/* 로그인이후 방문 기록 데이터를 콘솔에 띄워본다. */ const emToDay = await page.waitFor( "div.box_blog > dl.count_visitor:nth-child(1) > dd" ); const txtToDay = await page.evaluate( emToDay => emToDay.textContent, emToDay ); console.log("-. 오늘 방문자 수", txtToDay);
const emYesterDay = await page.waitFor( "div.box_blog > dl.count_visitor:nth-child(2) > dd" ); const txtYesterDay = await page.evaluate( emYesterDay => emYesterDay.textContent, emYesterDay ); console.log("-. 어제 방문자 수", txtYesterDay); const emCumulativ = await page.waitFor( "div.box_blog > dl.count_visitor:nth-child(3) > dd" ); const txtCumulativ = await page.evaluate( emCumulativ => emCumulativ.textContent, emCumulativ ); console.log("-. 누적 방문자 수", txtCumulativ);
|
위 코드를 실행시켜보면.
이제 위와 같은 에러가 나타나지 않는것을 확인 할 수 있다.
출력결과는 아래와 같다.
# 실행 결과
다시한번 evaluate( )는 함수임을 기억하자.
# 참고
티스토리의 아이디, 패스워드 입력창의 경우
키보드 입력으로 판단되지 않았기 때문에.
로그인 버튼이 활성화 되지 않은 것을 확인 되었다.
이때는 Puppeteer의 키보드 입력과 같은 이벤트를 발생시켜서 처리할 수 있게끔 작업을 진행해 주어야 한다.
'Node.js > Puppeteer' 카테고리의 다른 글
[Puppeteer] 퍼펫티어 setViewport()를 사용한 창 크기 조절 (0) | 2020.05.29 |
---|---|
[Puppeteer] evaluate() 페이지 데이터 추출 (0) | 2020.05.27 |
[Puppeteer] Cheerio 모듈을 활용한 데이터 스크랩핑 (0) | 2019.06.20 |
[Puppeteer] 페이지 클릭 및 입력 이벤트 (0) | 2019.05.10 |
[Puppeteer] 퍼펫티어에서 크롬 확장프로그램 사용하기 (2) | 2019.04.30 |