文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Node爬虫工具Puppeteer入门教程实践

2024-04-02 19:55

关注

【Puppeteer概要】

【Puppeteer 错误处理】

Error handling

TimeoutError 一个处理超时错误的例子:

const {
    TimeoutError
} = require('puppeteer/Errors'); // ...
try {
    await page.waitForSelector('.foo');
} catch(e) {
    if (e instanceof TimeoutError) {  
    // 如果超时,做一些处理。 
    }
}

Puppeteer Working with Chrome Extensions

注意 Chrome / Chromium 扩展当前只能在非无头模式下使用。

下面的代码用来处理扩展的 background page,该扩展的代码在 ./my-extension:

const puppeteer = require('puppeteer'); (async() = > {
const pathToExtension = require('path').join(__dirname, 'my-extension');
const browser = puppeteer.launch({
    headless: false,
    args: [`--disable - extensions - except = $ {
        pathToExtension
    }`, `--load - extension = $ {
        pathToExtension
    }`]
});
const targets = await browser.targets();
const backgroundPageTarget = targets.find(target = >target.type() === 'background_page');
const backgroundPage = await backgroundPageTarget.page(); // 像处理任何其他页面一样测试背景页面。  await browser.close();})();

【Puppeteer class:puppeteer】

const puppeteer = require('puppeteer');
puppeteer.launch().then(async browser = >{
const page = await browser.newPage();
await page.goto('https://www.google.com'); // 其他操作...  await browser.close();});

Methods

Methods

puppeteer.connect(options)v0.9.0

puppeteer.createBrowserFetcher([options])v0.9.0

puppeteer.defaultArgs([options])v0.9.0

puppeteer.executablePath()v0.9.0

puppeteer.launch([options])v0.9.0

这个方法结合了下面3个步骤:

使用 puppeteer.defaultArgs() 作为一组默认值来启动 Chromium。

启动浏览器并根据 executablePathhandleSIGINTdumpio 和其他选项开始管理它的进程。 创建一个 Browser 类的实例,并根据 defaultViewportslowMoignoreHTTPSErrors 初始化它。 ignoreDefaultArgs 选项可用于自定义(1)步骤的行为。 例如,要从参数中过滤掉 --mute-audio

const browser = await puppeteer.launch({
    ignoreDefaultArgs: ['--mute-audio']
});
复制代码

Puppeteer 浏览器

const puppeteer = require('puppeteer');
puppeteer.launch().then(async browser = >{
const page = await browser.newPage();
await page.goto('https://example.com');
await browser.close();
});
const puppeteer = require('puppeteer');
puppeteer.launch().then(async browser = >{ // 存储节点以便能重新连接到 Chromium  
const browserWSEndpoint = browser.wsEndpoint();  // 从 Chromium 断开和 puppeteer 的连接  browser.disconnect();  // 使用节点来重新建立连接  
const browser2 = await puppeteer.connect({browserWSEndpoint});  // 关闭 Chromium  
await browser2.close();});

Puppeteer 页面

const puppeteer = require('puppeteer');
puppeteer.launch().then(async browser = >{
    const page = await browser.newPage();
    await page.goto('https://example.com');
    await page.screenshot({
        path: 'screenshot.png'
    });
    await browser.close();
});
page.once('load', () => console.log('Page loaded!'));
function logRequest(interceptedRequest) {
    console.log('A request was made:', interceptedRequest.url());
}
page.on('request', logRequest); // 一段时间后...page.removeListener('request', logRequest);

Methods

page.$(selector)v0.9.0

page.$$(selector)v0.9.0

page.waitForSelector(".index-content .click-zoom a")

await page.waitForSelector(".index-content .click-zoom a")

page.waitFor(1000)

await page.waitFor(1000)

page.click('.btn')

await page.click('.btn')

page.evaluate

await page.evaluate(() => {
      document.getElementById("HD_CheckIn").value = "2020-07-11";
})

示例



const fs = require('fs')
const puppeteer = require('puppeteer');
(async () => {
    const browser = await puppeteer.launch({
        headless: false,
        args: ['--start-maximized', '--disable-infobars'],
        width: 1600,
        height: 900
    });
    // 1、 创建两个页面
    const page = await browser.newPage();
    const page2 = await browser.newPage();
    // 2、进入首页
    await page.goto(
        'https://game.pipajam.com/'
    );
    // 3、等待页面游戏数据元素加载完成
    await page.waitForSelector(".index-content .click-zoom a")
    // 4、获取所以游戏链接 游戏名称 
    const list = await page.$$eval(".index-content .click-zoom a", (el => el.map(el => ([el.href, el.getElementsByTagName('h6')[0].innerText]))));
    console.log(list);
    let len = list.length, index = 0, data = []
    // 5、调用函数 组装数据
    mainFun()
    async function mainFun () {
        try {
            // 6、开启page2 页面 获取游戏详情数据
            await page2.goto(
                list[index][0],{
                    timeout: 0
                }
            );
            // 7、等待详情卡片加载完成
            await page2.waitForSelector(".play-game-card .play-game-card-center")
            // 8、获取游戏链接地址 图片地址
            const item = await page2.$eval(".play-game-card .play-game-card-center", (el => [el.getElementsByTagName('p')[0].innerHTML, el.getElementsByTagName('img')[0].src]));
            await page2.click('.play-game-card .play-game-card-center a')
            const url = await page2.evaluate(param => window.location.href, "参数");
            // 9、组装数据
            data.push({
                description: item[0],
                img: item[1],
                instructton: "",
                keyfeatures: "",
                name: list[index][1],
                published: "Mon Oct 08 2018",
                tags: [],
                url,
                type: 'Children\'s intelligence',
            })
            console.log('以写入第' + (index+1) + '数据。');
            // 10、获取所以游戏数据 并写入指定json 文件
            ++index < len ? mainFun() : fs.writeFile('../../json/Game/pipajam.json', JSON.stringify(data), () => {})
        } catch (error) {
            console.log(error, 'err')
        }
    }
})();

到此这篇关于Node爬虫工具Puppeteer入门教程实践的文章就介绍到这了,更多相关Node Puppeteer入门内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-前端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯