inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Node.js로 웹 크롤링하기

8-5. 인스타 하트 클릭과 DB 저장

[에러발생]Cannot read property 'findOne' of undefined

367

이재형

작성한 질문수 6

0

안녕하세요!

let result=[]; 밑으로 코드는 전부 붙여넣었는데,

TypeError: Cannot read property 'findOne' of undefined  at crawler (/Users/fullyalive/Project/project_nodeJsCrawler/lecture/index.js:68:44)

    at process._tickCallback (internal/process/next_tick.js:68:7)가 뜨는데 해결방법을 모르겠습니다 ㅠㅠ

코드는 다음 코드입니다.

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

const db = require("./models");
dotenv.config();

const crawler = async () => {
try {
await db.sequelize.sync();
const browser = await puppeteer.launch({
headless: false,
args: ["--window-size=1920,1080", "--disable-notifications"],
userDataDir: "/Users/fullyalive/Project/userData"
});
const page = await browser.newPage();
await page.setViewport({
width: 1920,
height: 1080
});
await page.goto("https://instagram.com");
if (await page.$(`a[href="/${process.env.IN_ID}/"]`)) {
console.log("✅ 이미 로그인 되어 있습니다.");
} else {
await page.waitForSelector("button.L3NKy"); // instagram 내 페이스북 로그인버튼
await page.click("button.L3NKy");
await page.waitForNavigation(); // facebook 로그인 창 리다이렉트를 기다린다.
await page.waitForSelector("#email"); // 해당 태그의 존재 여부를 확인
await page.type("#email", process.env.FB_ID);
await page.type("#pass", process.env.FB_PW);
await page.waitForSelector("#loginbutton");
await page.click("#loginbutton");
console.log("🙆🏻‍ 로그인 완료");
}
let result = [];
let prevPostId = "";
while (result.length < 10) {
const moreButton = await page.$("button.sXUSN"); // 더보기 버튼 클릭
if (moreButton) {
await page.evaluate(btn => btn.click(), moreButton);
}
const newPost = await page.evaluate(() => {
const article = document.querySelector("article:first-child");
const postId =
article.querySelector(".c-Yi7") &&
article
.querySelector(".c-Yi7")
.href.split("/")
.slice(-2, -1)[0];
const name =
article.querySelector("h2") &&
article.querySelector("h2").textContent;
const img =
article.querySelector(".KL4Bh img") &&
article.querySelector(".KL4Bh img").src;
const content =
article.querySelector(".C4VMK > span") &&
article.querySelector(".C4VMK > span").textContent;
return {
postId,
name,
img,
content
};
});
if (newPost.postId !== prevPostId) {
console.log(newPost);
if (!result.find(v => v.postId === newPost.postId)) {
const exist = await db.Instagram.findOne({
where: { postId: newPost.postId }
});
if (!exist) {
result.push(newPost);
}
}
}
await page.waitFor(1000);
await page.evaluate(() => {
const article = document.querySelector("article:first-child");
const heartBtn = article.querySelector(".coreSpriteHeartOpen span");
if (heartBtn.className.includes("outline")) {
heartBtn.click();
}
});
prevPostId = newPost.postId;
await page.waitFor(1000);
await page.evaluate(() => {
window.scrollBy(0, 800);
});
}
await Promise.all(
result.map(r => {
return db.Instagram.create({
postId: r.postId,
media: r.img,
writer: r.name,
content: r.content
});
})
);

console.log(result.length);
await page.close();
await browser.close();
} catch (e) {
console.error(e);
}
};

crawler();

웹-크롤링 javascript nodejs puppeteer

답변 1

0

제로초(조현영)

models/index.js에 db.Instagram = require('./instagram.js')(sequelize, Sequelize)가 없는 듯 합니다.

headless 궁금한게 있어요!

0

413

2

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

0

338

2

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

0

276

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

554

1

puppeteer 관련

0

598

2

6-3 proxy-database 관련

1

287

1

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

0

794

1

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

1

488

1

아래 noscript 내용입니다.

0

528

1

크롤링

0

375

1

앱 크롤링

0

1783

1

페이스북 로그인

0

544

1

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

1

461

1

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

0

440

2

대량 요청 처리 방법

0

463

1

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

0

249

1

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

0

364

2

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

0

300

1

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

0

309

1