nodejs爬虫库—puppeteer的使用

nodejs爬虫库—puppeteer的使用

很香的一个爬虫库,在熟练掌握我原生JS的使用下,使用该库,轻轻松松爬取各种数据~

该文章只记录个人认为比较好用的几个函数,如需要详细介绍请看相关文档:

Puppeteer 手册_w3cschool

安装

cnpm i --save puppeteer --ignore-scripts

–ignore-scripts 是不安装内置的浏览器,否则node_modules会很大,后续我们直接使用自己的谷歌浏览器或是下一个最新版的谷歌浏览器就好
浏览器地址:https://registry.npmmirror.com/binary.html?path=chromium-browser-snapshots/
安装好以后,新建一个js文件,输入如下代码

const puppeteer = require('puppeteer')
;(async () => {
    //创建一个浏览器对象
    const browser = await (puppeteer.launch({
    // 若是手动下载的chromium需要指定chromium地址, 默认引用地址为 /项目目录/node_modules/puppeteer/.local-chromium/
    executablePath: '这里换成自己的谷歌地址',
    ignoreDefaultArgs: ['--disable-extensions'],
    //设置超时时间
    // timeout: 15000,
    //如果是访问https页面 此属性会忽略https错误
    // ignoreHTTPSErrors: true,
    // 窗口大小
    // defaultViewport: {
    //   width: 1500,
    //   height: 700
    // },
    // 打开开发者工具, 当此值为true时, headless总为false
    // devtools: false,
    // 关闭headless模式, 会打开浏览器
    headless: false
    }));

  //创建一个页面,指向百度
  const page = await browser.newPage();
  await page.goto("https://www.baidu.com");
  // 输入搜索内容,并点击搜索
  await page.evaluate(() => {
    $("#kw").val("初音未来");
    $("#su").click();
  });
  // 等待页面跳转并加载完成
  await page.waitForNavigation({ waitUntil: "networkidle0" });
  // 点击图片选项
  await page.evaluate(() => {
    $(".s-tab-pic_p4Uej")[0].click();
  });
  // 等待页面跳转并加载完成
  await page.waitForNavigation({ waitUntil: "networkidle0" });
  // 选取图片地址并返回
  const data = await page.evaluate(() => {
    const res = [];
    $(".main_img.img-hover").each(function () {
      res.push($(this).attr("src"));
    });
    return res;
  });
  // 打印结果
  console.log(data);
})()

通过以上代码,能爬取部分初音未来相关图片

个人常用函数:

//等待页面跳转完成后不再有网络连接
await page.waitForNavigation({ waitUntil: "networkidle0" })
//等待1S
await new Promise(r=>setTimeout(r,1000))
//在页面里执行代码,可返回值
await page.evaluate(() => {});
//截图
await page.screenshot({
  path: './paper.jpeg',  //路径
  fullPage: true,   //是否是完整的页面
  quality:70  //质量,0~100
});
//设置视口大小
await page.setViewport({
  width: 1920,
  height: 1080,
});
//按下回车键
await page.keyboard.press('Enter') 
//以下都可传入{ waitUntil: "networkidle0" }
//page.goto:打开新页面
//page.goBack :回退到上一个页面
//page.goForward :前进到下一个页面
//page.reload :重新加载页面

个人觉得核心就是evaluate,包括一些滚动事件,能写原生JS代码就很香,不用记那么多API,evaluate用好就够了,剩下看个人JS DOM操作功底啦~

具体详细可看中文官方文档:

https://zhaoqize.github.io/puppeteer-api-zh_CN/

注:以下是page.keyboard.press可使用的按键

'0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' |
'Power' | 'Eject' | 'Abort' | 'Help' | 'Backspace' | 'Tab'| 
'Numpad5' | 'NumpadEnter' | 'Enter' | '\r' | '\n' | 'ShiftLeft' | 
'ShiftRight' | 'ControlLeft' | 'ControlRight' | 'AltLeft' | 'AltRight' | 
'Pause' | 'CapsLock' | 'Escape' | 'Convert' | 'NonConvert' | 'Space' | 
'Numpad9' | 'PageUp' | 'Numpad3' | 'PageDown' | 'End' | 'Numpad1' | 
'Home' | 'Numpad7' | 'ArrowLeft' | 'Numpad4' | 'Numpad8' | 'ArrowUp' | 
'ArrowRight' | 'Numpad6' | 'Numpad2' | 'ArrowDown' | 'Select' | 'Open' | 
'PrintScreen' | 'Insert' | 'Numpad0' | 'Delete' | 'NumpadDecimal' | 
'Digit0' | 'Digit1' | 'Digit2' | 'Digit3' | 'Digit4' | 'Digit5' |
 'Digit6' | 'Digit7' | 'Digit8' | 'Digit9' | 'KeyA' | 'KeyB' | 'KeyC' |
 'KeyD' | 'KeyE' | 'KeyF' | 'KeyG' | 'KeyH' | 'KeyI' | 'KeyJ' | 'KeyK' | 
'KeyL' | 'KeyM' | 'KeyN' | 'KeyO' | 'KeyP' | 'KeyQ' | 'KeyR' | 'KeyS' | 
'KeyT' | 'KeyU' | 'KeyV' | 'KeyW' | 'KeyX' | 'KeyY' | 'KeyZ' | 
'MetaLeft' | 'MetaRight' | 'ContextMenu' | 'NumpadMultiply' | 
'NumpadAdd' | 'NumpadSubtract' | 'NumpadDivide' |
 'F1' | 'F2' | 'F3' | 'F4' | 'F5' | 'F6' | 'F7' | 'F8' | 'F9' | 'F10' | 
'F11' | 'F12' | 'F13' | 'F14' | 'F15' | 'F16' | 'F17' | 'F18' | 'F19' | 
'F20' | 'F21' | 'F22' | 'F23' | 'F24' | 'NumLock' | 'ScrollLock' | 
'AudioVolumeMute' | 'AudioVolumeDown' | 'AudioVolumeUp' | 
'MediaTrackNext' | 'MediaTrackPrevious' | 'MediaStop' | 
'MediaPlayPause' | 'Semicolon' | 'Equal' | 'NumpadEqual' | 
'Comma' | 'Minus' | 'Period' | 'Slash' | 'Backquote' | 'BracketLeft' |
 'Backslash' | 'BracketRight' | 'Quote' | 'AltGraph' | 'Props' | 
'Cancel' | 'Clear' | 'Shift' | 'Control' | 'Alt' | 'Accept' |
 'ModeChange' | ' ' | 'Print' | 'Execute' | '\u0000' | 
'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g' | 'h' | 'i' | 'j' | 'k' | 'l' | 
'm' | 'n' | 'o' | 'p' | 'q' | 'r' | 's' | 't' | 'u' | 'v' | 'w' | 'x' |
 'y' | 'z' | 'Meta' | '*' | '+' | '-' | '/' | ';' | '=' | ',' | '.' | 
'`' | '[' | '\\' | ']' | "'" | 'Attn' | 'CrSel' | 'ExSel' | 'EraseEof' |
 'Play' | 'ZoomOut' | ')' | '!' | '@' | '#' | '$' | '%' | '^' | '&' |
 '(' | 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H' | 'I' | 'J' | 'K' | 
'L' | 'M' | 'N' | 'O' | 'P' | 'Q' | 'R' | 'S' | 'T' | 'U' | 'V' | 'W' | 
'X' | 'Y' | 'Z' | ':' | '<' | '_' | '>' | '?' | '~' | '{' | '|' | '}' |
 '"' | 'SoftLeft' | 'SoftRight' | 'Camera' | 'Call' | 'EndCall' |
 'VolumeDown' | 'VolumeUp'
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
nodejs使用puppeteer是通过调用puppeteer来实现的。Puppeteer是一个基于Chrome浏览器内核的nodejs爬虫包,它可以模拟用户操作界面,包括页面滚动、按钮点击、导航跳转等功能。你可以通过以下步骤来实现nodejs使用puppeteer: 1. 首先,安装puppeteer。你可以通过全局安装或者当前项目安装的方式进行安装。全局安装的命令是:npm -g install puppeteer;当前项目安装的命令是:npm -S install puppeteer。 2. 创建一个async函数,例如puppeteerTest,在函数内部进行puppeteer操作。 3. 在puppeteerTest函数中,你可以设置一些选项,例如设置用户代理(user agent),可以通过args参数来传递。例如,你可以设置options对象,其中headless属性用于控制是否以无头模式运行,args属性用于设置命令行参数,包括设置用户代理。 4. 使用require语句引入puppeteer,并通过puppeteer.launch(options)方法来启动一个浏览器实例。 5. 调用browser.newPage()方法创建一个新的页面实例。 6. 可以使用page.setViewport()方法设置页面的视口大小。 7. 使用page.goto(url)方法跳转到指定的URL地址。 下面是一个示例代码: ```javascript const puppeteerTest = async () => { const user_agent = "--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36"; const options = { headless: false, // 是否以无头模式运行 args: ['--no-sandbox', user_agent] // 设置命令行参数,包括设置用户代理 }; const puppeteer = require('puppeteer'); const browser = await puppeteer.launch(options); const page = await browser.newPage(); await page.setViewport({ width: 1020, height: 900 }); // 设置页面视口大小 await page.goto("https://www.baidu.com"); // 跳转到指定的URL地址 }; puppeteerTest(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tx8087

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值