묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Node.js로 웹 크롤링하기
headless 궁금한게 있어요!
const browser: Browser = await puppeteer.launch({ headless: true, args: ['--remote-debugging-port=9222', '--no-sandbox', '--disable-setuid-sandbox'] }); const page: Page = await browser.newPage(); 크롤링 만들고 있습니다!헤드리스를 true로 해봐도, 아예 없애봐도, 아래 args 를 이것저것 달아봐도크롤링을 시작하면 아래 창과 크롬은 안뜨나 화면에 이렇게 크게 빈화면이 나옵니다.. 저만 그런가요? 이거 없애는 방법이 뭘까요 ㅠㅠ
-
미해결Node.js로 웹 크롤링하기
6강 프록시 서버 테스트 관련하여
안녕하세요.. 프록시 사이트 (http://spys.one/free-proxy-list/KR/) 에 있는 프록시 사이트에 대한 정보를 가져와서, sqlite에 저장하는 코드로 테스트 하고 있습니다. 두가지 문제 현사잉 발생하고 있습니다.관련 크롤러 함수를 실행했는데, puppeteer의 브라우저 화면이 안나나나지만, 프록시 사이트 정보를 클로링은 합니다. 현재 headless:false로 해서 브라우저를 기동시키고 있는데, 왜 이런 형상이 발생할 까요? 인터넷 정보를 서치하다 보니, 브라우저 실행시 '--no-sandbox'를 해보하고 해서 해봤더니, 페이지 보이기는 합니다. (이 옵션의 의미는 무엇인지 궁금합니다.)강의 동영상에서 알려주신대로 크롤링 된 사이트에서 latency가 가장 작은 ip를 이용해서 브라우저 실행시 --proxy-server=fastestProxy 로 설정한 후 네이버 IP 확인 페이지를 호출했는데,Error: net::ERR_TIMED_OUT at https://search.naver.com/search.naver?where=nexearch&ssc=tab.nx.all&query=%EB%82%B4%EC%95%84%EC%9D%B4%ED%94%BC%EC%A3%BC%EC%86%8C&sm=tab_she&qdt=0 가 발생하는데, 이는 네이버에서 Proxy서버에서 접근하는 것을 막아서 발생하는 것인가요? 프록시 서버를 사용하지 않고 브라우저를 생성하면, 정상적으로 접근되어서 제 IP 주소를 확인할 수 은 있습니다.강의 처럼 변경된 프록시 서버의 ip를 확인할 수 있는 방법이 무엇인지 알려주시면 좋겠습니다.
-
미해결Node.js로 웹 크롤링하기
페이스북 로그인 로그아웃 자동화관련
안녕하세요.. 5-1 페이스북 로그인/로그아웃 관련 강의를 따라 하고 있습니다.puppeteer의 page를 이용해서 로그인 버튼까지는 클릭해서 실행까지는 되는 것 같습니다.그래서 로그인 버튼 클릭후에 사용자에게 로그인 승인 알람 메시지를 처리해야 실질적인 로그인 페이지로 넘어가고 있는 상황입니다. 이럴경우 강의 시간에 알려주신 방법들은 대부분이 타임아웃 오류가 발생합니다. 이 부분을 어떻게 해결해야 할지 방법을 알려 주시면 좋겠습니다. 강의 내용의 모습이랑. 현재시점의 페이스북이 달라서 수정하는 것이 초보자에게는 어렵네요..
-
해결됨Node.js로 웹 크롤링하기
3-2 axios로 이미지 저장하기에서 axios 관련 오류..
안녕하세요.. 3-2강을 따라하고 있습니다. 3-1강에서 발생한 선택자 관련 문제는 docuemnt.querySelector를 이용해서 포스터 이미지 태그의 src를 가져오는 것은 되었습니다.추출된 url을 이용하여 웹브라우저에서 해당 이미지를 확인할 수 있었습니다. 그런데,3-2강에 나와있는대로, axios를 이용하여 해당 이미지를 다운로드 받으려고 하니, 오류가 발생합니다. 오류 내용은 아래 이미지와 같습니다.커뮤니티 게시판에 AxiosError 메시지 걺색을 했는데 결과가 없어서.. 바로 질문 올립니다. 어떻게 해결해야 할까요?
-
미해결Node.js로 웹 크롤링하기
3-1 이미지 다운로드 준비하기 에서 선택자 구성 질문
안녕하세요.. 현재 3-1강을 따라 하고 있씁니다.현재 네이버 영화사이트가 강의시점하고 달라서 현재 url에 맞게 테스트 하면서 따락 가고 있습니다.그런데 지금 네이버가 보여주는 웹사이트에서 영화포스터 이미지를 다운로드 받으려고, css 선택자를 구성하고자 하는데, 잘 안됩니다. 도움을 주시면 좋겠습니다. 현재의 네이버 영화url에서 포스터 이미지는 위의 이미지에서 빨간선에 둘러싸인 이미지라고 판단햇습니다. 요소 선택자로 해당 요소를 선택하니, 제생각에는 '.detail_info a.thumb._item ._img' 라고 생각했는데, 콘솔창에서 .$('.detail_info a.thumb._item img._img')를 입력했더니 null 이 나옵니다. 어떻게 선택자를 구성해야 하는지 알 수 있을까요? 콘솔에서 해당 이미지의 src를 추출되어야 할 텐데.. 이미지가 선택안되어서 계속 오류가 발생합니다.
-
해결됨Node.js로 웹 크롤링하기
2-4 csv 출력하기에서 오류 발생
안녕하세요.. 최근에 강의를 수강하고 있습니다.2-4강을 따라서 테스트하고 있습니다.그런데 총 10개의 링크를 가져와서 puppeteer를 이용해서 평점값을 가져오는데, 중간에 하나의 결과를 저장하지 않는 오류가 발생합니다. 왜 그럴까요? 처음에는 인덱스 번호 2번이 undefined 되더니, 이번에는 인덱스 7번이 생성이 안되어서 cs 파일 생성시 오류가 발생합니다. 이런 현상은 왜 발생할까요?
-
미해결Node.js로 웹 크롤링하기
try-puppeteer.appspot.com 을 사용할 수 없나요?
try-puppeteer.appspot.com 이 사이트가 현재는 접속이 안되네요이런 기능을 할 수 있는 유사한 사이트가 더 있을까요?
-
미해결Node.js로 웹 크롤링하기
크롬 확장프로그램 관련 질문드립니다.
본 강의와 관련이 없을 수 있는데,크롤링 공부를 하는 중에 궁금한게 생겨 질문드립니다.puppeteer로 생성한 브라우저에서 크롬 확장프로그램을 설치할 수 있는 방법이 있나요?있다면 어떤 키워드로 검색을 해서 찾아봐야하는지 알려주시면 감사하겠습니다.
-
미해결
puppeteer 네이버 로그인
안녕하세요. 제가 프로그램을 만들고 있습니다.네이버 로그인을 puppeteer로 자동화를 하려고 하고있습니다.하지만 네이버에서 매크로 프로그램으로 로그인을 하는것을 막고 있습니다 ㅠㅠ로그인을 자동화 시키려하면 캡챠로 넘어가서 다른 방법이 있는지 알아보는 와중복사 붙여넣기 기능을 하면 된다고 구글링을 통해 봤습니다.하지만 복사 붙여기능또한 네이버 로그인에서는 안되게 막아놓은것 같습니다.. 혹시 네이버 로그인 자동화를 구현하신 분 있는 멋진분을 찾습니당.
-
미해결Node.js로 웹 크롤링하기
크롤링 자바스크립트 exe파일
안녕하세요!! 크롤링 강의 너무 잘들었습니다!!이 강의를 듣고 더 무언가를 해보고 싶어, 질문드립니다!!강의 내용 중 unsplash사이트에서 이미지를 가져오는 내용이 있는데요.이 코드를 돌리는데 명령어가 아닌 js파일을 exe실행 파일로 만든 후 exe파일을 눌었을 경우 코드가 실행되기 위해서 npm의 pkg를 사용하여 만들었는데 실행이 안되서요..ㅠ강의자님은 js파일을 exe실행 파일로 만들으셔서 사용하실 때 어떤 방법을 이용하시나요?!
-
미해결Node.js로 웹 크롤링하기
puppeteer 관련
headless : false 로 설정해서 실행을 하면...생각보다 자주 크로니움이 많이 튕기며 오류를 발생시킵니다.puppeteer 와 puppeteer-core 업데이트도 진행했고, 크롬브라우져도 최신버젼을 사용하고 있습니다. 혹시 팁있을까요?
-
해결됨Node.js로 웹 크롤링하기
6-3 proxy-database 관련
sequelize-cli 까지 설치가 된거 같긴 한데... sequelize init 을 누르면 그림과 같이 오류가 떠요~ mac 에서 nvm 도 설치하고, 이것저것 계속 했는데도 잘 안됩니다. 아래 작업도 했는데도, 안돼서 진도를 3시간째 못나가고 있네요. 도움 주시면 감사하겠습니다. ㅠㅠ 정말 열심히 듣고 있는데.. ㅠ
-
미해결Node.js로 웹 크롤링하기
크롤링을 여러개 돌리려면 어떠한 방법을 선택하는게 좋을까요?
안녕하세요, 지금 Puppeteer로 크롤링을 하고있는데 예를들어서 1 ~ 10까지 작업이 각각 있다고했을때 이 10가지의 크롤링 작업을 완료하는데 너무 오래걸려서 Multi Processing 혹은 Multi Thread 방식을 생각하고 있습니다. 둘중에 어떠한게 좋을까요? Puppeteer 1개(node process 1개)로 1~10까지 돌렸을때 너무 오래걸려서 이걸 각각의 작업당 프로세스 1개를 붙힐것인지, 아니면 Process는 하나인데 Worker Thread를 여러개 만들어서 Main 스레드는 1번 작업, 나머지 9개 Worker Thread 생성해서 각각 작업에 한개씩 붙혀서 작업하게끔 하는게 좋을지 고민하고 있는데 혹시 어떠한 방법이 좋을까요 ?혹시 설명이 부족할까봐 좀 구체적으로 예시를 남기면,<기존방식>작업들: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10이름이 main.js인 1개 자바스크립트 파일을 node main.js로 실행 및 이걸로 그냥 1~10까지 작업들을 모두 동기적으로 처리>> 너무 시간이 오래걸림<원하는 방식 및 고민하고 있는 2가지 방식>작업들: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10이름이 main.js인 1개 자바스크립트 파일이 있고 process.argv로 인자를 줘서 아래와 같이 node process를 10개를 생성하여 각각 작업들을 1개의 프로세스들이 실행node main.js 1node main.js 2node main.js 3 ...node main.js 10 이름이 main.js인 1개 자바스크립트 파일이 있고 거기에서 Worker Thread 9개를 만들어서 Main Thread는 1번작업에 붙히고, 만든 9개 Worker Thread를 각각 2,3,4 ~ 10까지의 작업에 각각 한개씩 붙혀서 작업감사합니다
-
미해결Node.js로 웹 크롤링하기
아래 noscript 내용입니다.
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에 삽입될 것입니다.이것과 비슷한 거 같습니다. 크롤링이 안되는 것일까요??
-
미해결Node.js로 웹 크롤링하기
크롤링
2달 전에 수업을 듣고 이제 네이버 지도를 크롤링을 하려고 하는데 noscript때문인지크롤링이 안되네요?혹시 noscript는 크롤링을 할 수 있는 방법이 있나요?
-
미해결Node.js로 웹 크롤링하기
앱 크롤링
수업 잘듣고 있습니다교육내용가 관련없지만웹말고 앱 크롤링이 가능한가요?
-
미해결Node.js로 웹 크롤링하기
페이스북 로그인
<button value="1" class="_42ft 4jy0 6lth 4jy6 4jy1 selected 51sy" name="login" data-testid="royallogin_button" type="submit" id="u_0_c_Cc">로그인</button> document.querySelector('#u_0_9_LS').click();위에 같이 실행하였는데 id값이 계속 변동하여 로그인 안되어서 document.querySelector('._42ft _4jy0 _6lth _4jy6 _4jy1 selected _51sy').click();class로 했는데도 로그인 안되네요 ??방법이 없나요?
-
미해결Node.js로 웹 크롤링하기
2019년도 영상이라 error가 나는 걸까요? 2-4. csv에 출력하기에서 error
v16.19.18.19.3mac 2-4. csv에 출력하기 Error: Protocol error (Target.createTarget): Target closed.at /Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:74:56at new Promise (<anonymous>)at Connection.send (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:73:12)at Browser._createPageInContext (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:174:47)at BrowserContext.newPage (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:367:26)at Browser.newPage (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:166:33)at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:112:23)at /Users/youssi/crawler/lecture/index.js:15:34at Array.map (<anonymous>)at crawler (/Users/youssi/crawler/lecture/index.js:13:31)-- ASYNC --at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:111:15)at /Users/youssi/crawler/lecture/index.js:15:34at Array.map (<anonymous>)at crawler (/Users/youssi/crawler/lecture/index.js:13:31)at processTicksAndRejections (node:internal/process/task_queues:96:5)Error: Protocol error (Target.createTarget): Target closed.at /Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:74:56at new Promise (<anonymous>)at Connection.send (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:73:12)at Browser._createPageInContext (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:174:47)at BrowserContext.newPage (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:367:26)at Browser.newPage (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:166:33)at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:112:23)at /Users/youssi/crawler/lecture/index.js:15:34at Array.map (<anonymous>)at crawler (/Users/youssi/crawler/lecture/index.js:13:31)-- ASYNC --at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:111:15)at /Users/youssi/crawler/lecture/index.js:15:34at Array.map (<anonymous>)at crawler (/Users/youssi/crawler/lecture/index.js:13:31)at processTicksAndRejections (node:internal/process/task_queues:96:5)Error: Protocol error (Target.createTarget): Target closed.at /Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:74:56at new Promise (<anonymous>)at Connection.send (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:73:12)at Browser._createPageInContext (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:174:47)at BrowserContext.newPage (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:367:26)at Browser.newPage (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:166:33)at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:112:23)at /Users/youssi/crawler/lecture/index.js:15:34at Array.map (<anonymous>)at crawler (/Users/youssi/crawler/lecture/index.js:13:31)-- ASYNC --at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:111:15)at /Users/youssi/crawler/lecture/index.js:15:34at Array.map (<anonymous>)at crawler (/Users/youssi/crawler/lecture/index.js:13:31)at processTicksAndRejections (node:internal/process/task_queues:96:5)Error: Protocol error (Target.createTarget): Target closed.at /Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:74:56at new Promise (<anonymous>)at Connection.send (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:73:12)at Browser._createPageInContext (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:174:47)at BrowserContext.newPage (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:367:26)at Browser.newPage (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:166:33)at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:112:23)at /Users/youssi/crawler/lecture/index.js:15:34at Array.map (<anonymous>)at crawler (/Users/youssi/crawler/lecture/index.js:13:31)-- ASYNC --at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:111:15)at /Users/youssi/crawler/lecture/index.js:15:34at Array.map (<anonymous>)at crawler (/Users/youssi/crawler/lecture/index.js:13:31)at processTicksAndRejections (node:internal/process/task_queues:96:5)Error: Protocol error (Target.createTarget): Target closed.at /Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:74:56at new Promise (<anonymous>)at Connection.send (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:73:12)at Browser._createPageInContext (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:174:47)at BrowserContext.newPage (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:367:26)at Browser.newPage (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:166:33)at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:112:23)at /Users/youssi/crawler/lecture/index.js:15:34at Array.map (<anonymous>)at crawler (/Users/youssi/crawler/lecture/index.js:13:31)-- ASYNC --at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:111:15)at /Users/youssi/crawler/lecture/index.js:15:34at Array.map (<anonymous>)at crawler (/Users/youssi/crawler/lecture/index.js:13:31)at processTicksAndRejections (node:internal/process/task_queues:96:5)Error: Protocol error (Target.createTarget): Target closed.at /Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:74:56at new Promise (<anonymous>)at Connection.send (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:73:12)at Browser._createPageInContext (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:174:47)at BrowserContext.newPage (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:367:26)at Browser.newPage (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:166:33)at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:112:23)at /Users/youssi/crawler/lecture/index.js:15:34at Array.map (<anonymous>)at crawler (/Users/youssi/crawler/lecture/index.js:13:31)-- ASYNC --at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:111:15)at /Users/youssi/crawler/lecture/index.js:15:34at Array.map (<anonymous>)at crawler (/Users/youssi/crawler/lecture/index.js:13:31)at processTicksAndRejections (node:internal/process/task_queues:96:5)Error: Protocol error (Target.createTarget): Target closed.at /Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:74:56at new Promise (<anonymous>)at Connection.send (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:73:12)at Browser._createPageInContext (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:174:47)at BrowserContext.newPage (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:367:26)at Browser.newPage (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:166:33)at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:112:23)at /Users/youssi/crawler/lecture/index.js:15:34at Array.map (<anonymous>)at crawler (/Users/youssi/crawler/lecture/index.js:13:31)-- ASYNC --at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:111:15)at /Users/youssi/crawler/lecture/index.js:15:34at Array.map (<anonymous>)at crawler (/Users/youssi/crawler/lecture/index.js:13:31)at processTicksAndRejections (node:internal/process/task_queues:96:5)Error: Protocol error (Target.attachToTarget): Target closed.at /Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:74:56at new Promise (<anonymous>)at Connection.send (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:73:12)at Connection.createSession (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:153:36)at Target._sessionFactory (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:116:75)at Target.page (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Target.js:73:32)at Target.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:112:23)at Browser._createPageInContext (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:177:31)at processTicksAndRejections (node:internal/process/task_queues:96:5)at async /Users/youssi/crawler/lecture/index.js:15:20-- ASYNC --at Target.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:111:15)at Browser._createPageInContext (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:177:31)at processTicksAndRejections (node:internal/process/task_queues:96:5)at async /Users/youssi/crawler/lecture/index.js:15:20at async Promise.all (index 0)at async crawler (/Users/youssi/crawler/lecture/index.js:13:5)-- ASYNC --at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:111:15)at /Users/youssi/crawler/lecture/index.js:15:34at Array.map (<anonymous>)at crawler (/Users/youssi/crawler/lecture/index.js:13:31)at processTicksAndRejections (node:internal/process/task_queues:96:5)Error: Protocol error (Target.attachToTarget): Target closed.at /Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:74:56at new Promise (<anonymous>)at Connection.send (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:73:12)at Connection.createSession (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:153:36)at Target._sessionFactory (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:116:75)at Target.page (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Target.js:73:32)at Target.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:112:23)at Browser._createPageInContext (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:177:31)at processTicksAndRejections (node:internal/process/task_queues:96:5)at async /Users/youssi/crawler/lecture/index.js:15:20-- ASYNC --at Target.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:111:15)at Browser._createPageInContext (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:177:31)at processTicksAndRejections (node:internal/process/task_queues:96:5)at async /Users/youssi/crawler/lecture/index.js:15:20at async Promise.all (index 1)at async crawler (/Users/youssi/crawler/lecture/index.js:13:5)-- ASYNC --at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:111:15)at /Users/youssi/crawler/lecture/index.js:15:34at Array.map (<anonymous>)at crawler (/Users/youssi/crawler/lecture/index.js:13:31)at processTicksAndRejections (node:internal/process/task_queues:96:5)Error: Protocol error (Target.attachToTarget): Target closed.at /Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:74:56at new Promise (<anonymous>)at Connection.send (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:73:12)at Connection.createSession (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:153:36)at Target._sessionFactory (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:116:75)at Target.page (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Target.js:73:32)at Target.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:112:23)at Browser._createPageInContext (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:177:31)at processTicksAndRejections (node:internal/process/task_queues:96:5)at async /Users/youssi/crawler/lecture/index.js:15:20-- ASYNC --at Target.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:111:15)at Browser._createPageInContext (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:177:31)at processTicksAndRejections (node:internal/process/task_queues:96:5)at async /Users/youssi/crawler/lecture/index.js:15:20at async Promise.all (index 2)at async crawler (/Users/youssi/crawler/lecture/index.js:13:5)-- ASYNC --at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:111:15)at /Users/youssi/crawler/lecture/index.js:15:34at Array.map (<anonymous>)at crawler (/Users/youssi/crawler/lecture/index.js:13:31)at processTicksAndRejections (node:internal/process/task_queues:96:5) index.jsconst parse = require('csv-parse/lib/sync'); const stringify = require('csv-stringify/lib/sync'); const fs = require('fs'); const puppeteer = require('puppeteer'); const csv = fs.readFileSync('csv/data.csv'); const records = parse(csv.toString('utf-8')); const crawler = async () => { try{ const result = []; const browser = await puppeteer.launch({ headless: false }); await Promise.all(records.map(async (r, i) => { try{ const page = await browser.newPage(); await page.goto(r[1]); const scoreEl = await page.$('.score.score_left .star_score'); if (scoreEl) { const text = await page.evaluate((tag) => { return tag.textContent; }, scoreEl); console.log(r[0], '평점', text.trim()); result.push([r[0], r[1], text.trim()]); } await Page.waitFor(3000); await page.close(); } catch (e) { console.error(e); } })); await browser.close(); const str = stringify(result); fs.writeFileSync('csv/result.csv', str); } catch (e) { console.error(e); } }; crawler(); package.json{ "name": "lecture", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "start": "node index" }, "author": "youssi", "license": "MIT", "dependencies": { "axios": "^1.3.4", "cheerio": "^1.0.0-rc.12", "csv-parse": "^4.4.6", "csv-stringify": "^5.3.0", "puppeteer": "^1.13.0", "xlsx": "^0.18.5" } }
-
미해결Node.js로 웹 크롤링하기
안녕하세요! for of와 Promise.all 차이점에 관해서 질문드려요!
[제로초 강좌 질문 필독 사항입니다]질문에는 여러분에게 도움이 되는 질문과 도움이 되지 않는 질문이 있습니다.도움이 되는 질문을 하는 방법을 알려드립니다.https://www.youtube.com/watch?v=PUKOWrOuC0c0. 숫자 0부터 시작한 이유는 1보다 더 중요한 것이기 때문입니다. 에러가 났을 때 해결을 하는 게 중요한 게 아닙니다. 왜 여러분은 해결을 못 하고 저는 해결을 하는지, 어디서 힌트를 얻은 것이고 어떻게 해결한 건지 그걸 알아가셔야 합니다. 그렇지 못한 질문은 무의미한 질문입니다.1. 에러 메시지를 올리기 전에 반드시 스스로 번역을 해야 합니다. 번역기 요즘 잘 되어 있습니다. 에러 메시지가 에러 해결 단서의 90%를 차지합니다. 한글로 번역만 해도 대부분 풀립니다. 그냥 에러메시지를 올리고(심지어 안 올리는 분도 있습니다. 저는 독심술사가 아닙니다) 해결해달라고 하시면 아무런 도움이 안 됩니다.2. 에러 메시지를 잘라서 올리지 않아야 합니다. 입문자일수록 에러메시지에서 어떤 부분이 가장 중요한 부분인지 모르실 겁니다. 그러니 통째로 올리셔야 합니다.3. 코드도 같이 올려주세요. 다만 코드 전체를 다 올리거나, 깃헙 주소만 띡 던지지는 마세요. 여러분이 "가장" 의심스럽다고 생각하는 코드를 올려주세요.4. 이 강좌를 바탕으로 여러분이 응용을 해보다가 막히는 부분, 여러 개의 선택지 중에서 조언이 필요한 부분, 제 경험이 궁금한 부분에 대한 질문은 대환영입니다. 다만 여러분의 회사 일은 질문하지 마세요.5. 강좌 하나 끝날 때마다 남의 질문들을 읽어보세요. 여러분이 곧 만나게 될 에러들입니다.6. 위에 적은 내용을 명심하지 않으시면 백날 강좌를 봐도(제 강좌가 아니더라도) 실력이 늘지 않고 그냥 코딩쇼 관람 및 한컴타자연습을 한 셈이 될 겁니다. 안녕하세요! 1-5 Promise.all 과 for of 문의 차이 강의 듣고 궁금한 점이 생겨서 질문드립니다!Promise.all 이 동시에 진행되어 속도가 빠른 대신 순서가 보장되지 않는다고 하셨고 for of는 순서대로 요청을 보내고 응답을 받기 때문에 속도가 좀 느리다고 하셨는데현업에서 많은 양의 데이터를 순서대로 크롤링 해야하는 경우에 Promise.all로 빠르게 크롤링 데이터를 받아와서 정렬을 하는게 나은가요 아니면 for of로 느리더라도 순서대로 데이터를 받아오는게 나은가요?
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
puppeteer 의 waitForTimeout 메소드 deprecated
안녕하세요.puppeteer 에서 waitForTimeout 실행하면 deprecated 되었다고 합니다. 대신 어떤 메소드를 사용해야 할까요?검색해보니 다양한게 있던데 waitForNetworkIdle(1000) 정도면 될까요? https://stackoverflow.com/questions/46919013/puppeteer-wait-n-seconds-before-continuing-to-the-next-line