最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

木偶不认识的链接

IT培训 admin 9浏览 0评论

木偶不认识的链接

我试图抢在表达一些HTML,但不知何故,我得到错误

Error: Evaluation failed: ReferenceError: link is not defined
    at __puppeteer_evaluation_script__:8:29
    at ExecutionContext.evaluateHandle (C:\Repositories\auto-grabber-server\node_modules\puppeteer\lib\ExecutionContext.js:124:13)
    at process._tickCallback (internal/process/next_tick.js:68:7)
  -- ASYNC --
    at ExecutionContext.<anonymous> (C:\Repositories\auto-grabber-server\node_modules\puppeteer\lib\helper.js:144:27)
    at ExecutionContext.evaluate (C:\Repositories\auto-grabber-server\node_modules\puppeteer\lib\ExecutionContext.js:58:31)
    at ExecutionContext.<anonymous> (C:\Repositories\auto-grabber-server\node_modules\puppeteer\lib\helper.js:145:23)
    at Frame.evaluate (C:\Repositories\auto-grabber-server\node_modules\puppeteer\lib\FrameManager.js:447:20)
    at process._tickCallback (internal/process/next_tick.js:68:7)
  -- ASYNC --
    at Frame.<anonymous> (C:\Repositories\auto-grabber-server\node_modules\puppeteer\lib\helper.js:144:27)
    at Page.evaluate (C:\Repositories\auto-grabber-server\node_modules\puppeteer\lib\Page.js:777:43)
    at Page.<anonymous> (C:\Repositories\auto-grabber-server\node_modules\puppeteer\lib\helper.js:145:23)
    at zrGrabber.StartGrabbingHtml (C:\Repositories\auto-grabber-server\grabbers\zr.grabber.js:52:40)
    at process._tickCallback (internal/process/next_tick.js:68:7)

链接已被传递到StartGrabbingHtml功能,但随后我,m到处提到的错误。我想,什么是错与异步的工作人员,但不能得到究竟是什么。

const puppeteer = require("puppeteer");
let links = [];
const Mongo = require('./../db/mongo');
const zrLinks = [
    "/",
    "/",
    "/"
];

module.exports = class zrGrabber {
    async startGrabbingLinks() {
        try {
            for (let i = 0; i < zrLinks.length; i++) {
                const browser = await puppeteer.launch();
                const page = await browser.newPage();
                await page.goto(zrLinks[i], {
                    waitUntil: 'load',
                    timeout: 0
                });
                const result = await page.evaluate(() => {
                    const links = document.querySelectorAll('div.head > h2 > a')
                    return [...links].map(link => link.href);
                });
                await page.close();
                await browser.close();
                links = [...links, ...result];
            }
            const db = new Mongo();
            for (let i = 0; i < links.length; i++) {
                // if link already in database skip grabbing
                const found = await db.findLink(links[i]);
                if (found) {
                    continue;
                }
                // else grab and write link to database
                await this.StartGrabbingHtml(links[i])
            }
        } catch (err) {
            console.log(err)
        }
    }

    async StartGrabbingHtml(link) {
        try {
            const browser = await puppeteer.launch();
            const page = await browser.newPage();
            await page.goto(link, {
                waitUntil: 'load',
                timeout: 0
            });
            const article = await page.evaluate(() => { // error throwing here
                const date = document.querySelector('#storyDetailArticle > time').innerHTML;
                const name = document.querySelector('#storyDetailArticle > h1').innerHTML;
                const description = document.querySelector('#storyDetailArticle > div.stroy_announcement > h3').innerHTML;
                const author = document.querySelector('#storyDetailArticle > div.announcement_author.story_author.no_preview > div').innerHTML;
                const content = document.querySelector('#storyDetailArticle > div.stroy_content').innerHTML;
                return {
                    source: link,
                    date: date,
                    name: name,
                    description: description,
                    author: author,
                    content: content
                };
            });
            console.log(article)
            const db = new Mongo();
            await db.insertOne(article);
            await page.close();
            await browser.close();
        } catch (err) {
            console.log(err)
        }
    }
}

什么我做错了吗?

回答如下:

该脚本不能从link上下文中访问变量page.evaluate

你应该把它作为像这样的说法:

await page.evaluate(link => {
    // ...
}, link);

木偶不认识的链接

我试图抢在表达一些HTML,但不知何故,我得到错误

Error: Evaluation failed: ReferenceError: link is not defined
    at __puppeteer_evaluation_script__:8:29
    at ExecutionContext.evaluateHandle (C:\Repositories\auto-grabber-server\node_modules\puppeteer\lib\ExecutionContext.js:124:13)
    at process._tickCallback (internal/process/next_tick.js:68:7)
  -- ASYNC --
    at ExecutionContext.<anonymous> (C:\Repositories\auto-grabber-server\node_modules\puppeteer\lib\helper.js:144:27)
    at ExecutionContext.evaluate (C:\Repositories\auto-grabber-server\node_modules\puppeteer\lib\ExecutionContext.js:58:31)
    at ExecutionContext.<anonymous> (C:\Repositories\auto-grabber-server\node_modules\puppeteer\lib\helper.js:145:23)
    at Frame.evaluate (C:\Repositories\auto-grabber-server\node_modules\puppeteer\lib\FrameManager.js:447:20)
    at process._tickCallback (internal/process/next_tick.js:68:7)
  -- ASYNC --
    at Frame.<anonymous> (C:\Repositories\auto-grabber-server\node_modules\puppeteer\lib\helper.js:144:27)
    at Page.evaluate (C:\Repositories\auto-grabber-server\node_modules\puppeteer\lib\Page.js:777:43)
    at Page.<anonymous> (C:\Repositories\auto-grabber-server\node_modules\puppeteer\lib\helper.js:145:23)
    at zrGrabber.StartGrabbingHtml (C:\Repositories\auto-grabber-server\grabbers\zr.grabber.js:52:40)
    at process._tickCallback (internal/process/next_tick.js:68:7)

链接已被传递到StartGrabbingHtml功能,但随后我,m到处提到的错误。我想,什么是错与异步的工作人员,但不能得到究竟是什么。

const puppeteer = require("puppeteer");
let links = [];
const Mongo = require('./../db/mongo');
const zrLinks = [
    "/",
    "/",
    "/"
];

module.exports = class zrGrabber {
    async startGrabbingLinks() {
        try {
            for (let i = 0; i < zrLinks.length; i++) {
                const browser = await puppeteer.launch();
                const page = await browser.newPage();
                await page.goto(zrLinks[i], {
                    waitUntil: 'load',
                    timeout: 0
                });
                const result = await page.evaluate(() => {
                    const links = document.querySelectorAll('div.head > h2 > a')
                    return [...links].map(link => link.href);
                });
                await page.close();
                await browser.close();
                links = [...links, ...result];
            }
            const db = new Mongo();
            for (let i = 0; i < links.length; i++) {
                // if link already in database skip grabbing
                const found = await db.findLink(links[i]);
                if (found) {
                    continue;
                }
                // else grab and write link to database
                await this.StartGrabbingHtml(links[i])
            }
        } catch (err) {
            console.log(err)
        }
    }

    async StartGrabbingHtml(link) {
        try {
            const browser = await puppeteer.launch();
            const page = await browser.newPage();
            await page.goto(link, {
                waitUntil: 'load',
                timeout: 0
            });
            const article = await page.evaluate(() => { // error throwing here
                const date = document.querySelector('#storyDetailArticle > time').innerHTML;
                const name = document.querySelector('#storyDetailArticle > h1').innerHTML;
                const description = document.querySelector('#storyDetailArticle > div.stroy_announcement > h3').innerHTML;
                const author = document.querySelector('#storyDetailArticle > div.announcement_author.story_author.no_preview > div').innerHTML;
                const content = document.querySelector('#storyDetailArticle > div.stroy_content').innerHTML;
                return {
                    source: link,
                    date: date,
                    name: name,
                    description: description,
                    author: author,
                    content: content
                };
            });
            console.log(article)
            const db = new Mongo();
            await db.insertOne(article);
            await page.close();
            await browser.close();
        } catch (err) {
            console.log(err)
        }
    }
}

什么我做错了吗?

回答如下:

该脚本不能从link上下文中访问变量page.evaluate

你应该把它作为像这样的说法:

await page.evaluate(link => {
    // ...
}, link);

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论