inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Node.js로 웹 크롤링하기

아래 noscript 내용입니다.

528

김동호

작성한 질문수 12

0


const puppeteer = require('puppeteer');
const dotenv = require('dotenv');

dotenv.config();

const crawler = async () => {
  try {
   
    const browser = await puppeteer.launch({ headless: false, args: ['--window-size=1920,1080', '--disable-notifications'] });
    const page = await browser.newPage();
    await page.setViewport({
      width: 1080,
      height: 1080,
    });
    await page.goto('https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=0&ie=utf8&query=서울+지게차');
    
    await page.waitFor(3000);
    await page.evaluate(() => { 
      window.scrollBy(0, 1500);
      document.querySelector('#loc-main-section-root > section > div > div.api_more_wrap > a').click();
    });
    await page.waitFor(3000);

    await page.waitFor(3000);
    await page.evaluate(() => { 
      document.querySelector('#_pcmap_list_scroll_container > ul > li:nth-child(1) > div.qbGlu > div.ouxiq.icT4K > div > div > span > a > span.hClKF').click();
    });
    await page.waitFor(3000);
    await page.evaluate(() => { 
      document.querySelector('#_pcmap_list_scroll_container > ul > li:nth-child(1) > div.qbGlu > div.ouxiq.icT4K > div > div > div > div:nth-child(1) > span.RUjqr > a').click();
    });
  } catch (e) {
    console.error(e);
  }
};

crawler();

 

Error: Evaluation failed: TypeError: Cannot read properties of null (reading 'click')

at __puppeteer_evaluation_script__:2:151

at ExecutionContext._evaluateInternal (/Users/youssi/Downloads/nodejs-crawler-master/lecture/node_modules/puppeteer/lib/ExecutionContext.js:122:13)

at processTicksAndRejections (node:internal/process/task_queues:96:5)

at async ExecutionContext.evaluate (/Users/youssi/Downloads/nodejs-crawler-master/lecture/node_modules/puppeteer/lib/ExecutionContext.js:48:12)

at async crawler (/Users/youssi/Downloads/nodejs-crawler-master/lecture/index.js:53:5)

-- ASYNC --

at ExecutionContext.<anonymous> (/Users/youssi/Downloads/nodejs-crawler-master/lecture/node_modules/puppeteer/lib/helper.js:111:15)

at DOMWorld.evaluate (/Users/youssi/Downloads/nodejs-crawler-master/lecture/node_modules/puppeteer/lib/DOMWorld.js:112:20)

-- ASYNC --

at Frame.<anonymous> (/Users/youssi/Downloads/nodejs-crawler-master/lecture/node_modules/puppeteer/lib/helper.js:111:15)

at Page.evaluate (/Users/youssi/Downloads/nodejs-crawler-master/lecture/node_modules/puppeteer/lib/Page.js:833:43)

at Page.<anonymous> (/Users/youssi/Downloads/nodejs-crawler-master/lecture/node_modules/puppeteer/lib/helper.js:112:23)

at crawler (/Users/youssi/Downloads/nodejs-crawler-master/lecture/index.js:53:16)

 

에러가 납니다. 구글 개발자도구에서 select an element~~~ 누르고 나서야

document.querySelector('#_pcmap_list_scroll_container > ul > li:nth-child(1) > div.qbGlu > div.ouxiq.icT4K > div > div > span > a > span.hClKF').click();
    });

위 소스가 정상적으로 작동을 합니다.

 

찾아보니

Javascript를 사용하여 브라우저에서 렌더링하는 웹 페이지를 가져오려고 합니다. 즉, Http Request Node를 사용하여 수신하는 초기 응답에 현재 검색 중인 데이터가 포함되지 않습니다. 당신의 데이터는 자바스크립트 안에 로드되어 브라우저에 의해 html에 삽입될 것입니다.

이것과 비슷한 거 같습니다. 크롤링이 안되는 것일까요??

javascript node.js 웹-크롤링 puppeteer

답변 1

0

제로초(조현영)

noscript 내용이라고 하는게 뭔 뜻인지 도저히 모르겠네요.

iframe 내부라서 보안 문제때문 클릭이 안 된 거고요. 다음과 같이 옵션에서 보안문제를 모두 해제한 후,

const browser = await puppeteer.launch({ headless: false, args: [
'--window-size=1920,1080', '--disable-notifications',
'--disable-web-security',
'--disable-features=IsolateOrigins,site-per-process'
] });

이렇게 선택하면 됩니다.

await page.evaluate(() => {
document.querySelector('#searchIframe').contentDocument.querySelector('#_pcmap_list_scroll_container span.hClKF').click();
});

headless 궁금한게 있어요!

0

414

2

6강 프록시 서버 테스트 관련하여

0

339

2

페이스북 로그인 로그아웃 자동화관련

0

277

2

3-2 axios로 이미지 저장하기에서 axios 관련 오류..

0

269

2

3-1 이미지 다운로드 준비하기 에서 선택자 구성 질문

0

250

3

2-4 csv 출력하기에서 오류 발생

0

294

3

try-puppeteer.appspot.com 을 사용할 수 없나요?

0

151

1

크롬 확장프로그램 관련 질문드립니다.

0

169

1

크롤링 자바스크립트 exe파일

0

555

1

puppeteer 관련

0

599

2

6-3 proxy-database 관련

1

288

1

크롤링을 여러개 돌리려면 어떠한 방법을 선택하는게 좋을까요?

0

794

1

네이버 영화 평점 크롤링 (axis cheerio)

1

489

1

크롤링

0

377

1

앱 크롤링

0

1783

1

페이스북 로그인

0

544

1

2019년도 영상이라 error가 나는 걸까요? 2-4. csv에 출력하기에서 error

1

461

1

안녕하세요! for of와 Promise.all 차이점에 관해서 질문드려요!

0

440

2

대량 요청 처리 방법

0

464

1

구글 패스워드 자동입력시 오류

0

250

1

반복크롤링 할 때 아래 질문주신분 하고 약간 형태가 달라요

0

366

2

인스타그램 돔의 value 값으로 쿼리셀렉터 찾을 수 있나요?

0

300

1

페이스북 로그인시 돔이 생성 안되는 문제

0

310

1

hyperfreed_story_id 사용불가라 태그가 많이 바뀌어서

0

344

1