• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    미해결

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

19.05.06 17:44 작성 조회수 288

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();

답변 1

답변을 작성해보세요.

0

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