第七步:简单爬虫与网页测试

Puppeteer

官方文档:https://puppeteer.bootcss.com/

1、安装

  • puppeteer是一个node插件
  • 安装命令:npm i puppeteer

2、概念

  • 无头浏览器:就是不打开浏览器的页面,直接进行浏览器后台操作

3、入门

  1. 引入:import puppeteer from "puppeteer"
  2. 创建浏览器:const browser = await puppeteer.launch([options])
  3. 创建新页面:const page = await browser.newPage()
  4. 然后就可以使用page进行页面的相关操作了
  5. 操作完成后就可以关闭:await browser.close()

4、puppeteer

  • puppeteer.launch([options]):打开一个浏览器,异步成功返回一个browser浏览器操作对象
    • headless:是否开启无头浏览器,默认true
    • defaultViewpord: 为每个页面设置一个默认视图窗口大小,默认800*600
      • width:页面宽度
      • height:页面高度
      • deviceScaleFactor:dpr,默认为1
      • null:设置为null就禁用视图窗口
    • args:给浏览器实例传递的其他参数
      • “–window-size=1920,1080”:将窗口调整为1920*1080
    • 5、browser

      • browser.newPage():异步成功返回一个page页面操作对象
      • browser.close():异步关闭浏览器
      • browser.pages():异步返回打开的所有页面操作对象列表

      6、page

      • page.goto(url, [options]):异步进入url地址的页面
        • timeout:跳转等待时间,默认30秒,30秒内没有打开页面就判断跳转失败
        • waitUntil:满足什么条件认为页面跳转完成,默认load
          • load:页面加载时触发
          • domcontentloaded:页面加载完成触发
          • networkidle0:页面不再有网络连接时触发
          • networkidle2:只有两个网络连接时触发
        • referer:设置请求头的referer,用来欺骗服务器的防盗链拦截
      • page.goBack([options]):操控页面后退路由,参数同上
      • page.goForward[options]:操控页面前进路由,参数同上
      • page.close():关闭当前页面
      • page.isClosed():返回页面是否被关闭
      • page.cookies():异步返回当前页面的cookie
      • page.screenshot(options):对页面进行截图
        • path:截图本地保存路径
        • fullpage:是否截取整个网站(就是下拉才能看清全部的真个),默认false
      • page.pdf(options):对页面保存为pdf
        • path:pdf本地保存路径
        • format:保存格式 可选值 - [“A4”]
      • page.evaluate(fn, [...args]):异步获取 在浏览器的控制台注入代码,代码执行后的结果
        • fn:在控制台运行的函数
          • 就相当于在浏览器的控制台执行JS脚本语言
          • 获取的结果可以用return返回结果
          • 注意,这个函数已经完全进入到浏览器控制台的作用域
        • args:给fn传递的参数
      • page.addScriptTag(options):异步 给网页注入JS代码
        • url:script标签的src属性值
        • path:注入的JS代码本地文件路径
        • content:以字符串的形式 注入的css代码内容
        • type:脚本引入类型 - [module]
      • page.addStyleTag(options):异步 给网页注入css代码
        • url:link标签的href属性值
        • path:注入的css代码本地文件路径
        • content:以字符串的形式 注入的css代码
      • page.waitForSelector(selector, [options]):异步等待页面某个元素加载完成
        • selector:元素css选择器
        • options:
          • visible:等待元素在dom中可见
          • hidden:等待元素在页面中消失
          • timeout:等待时间
      • page.waitForRequest(url, [options])
        • url:等待的请求地址
        • options:
          • timeout:等待时间
      • page.setCacheEnabled(false):设置请求缓存状态,默认启动缓存
      • page.select(selector):异步获取页面元素
      • page.click(selector, [options]):异步点击页面元素
        • selector:元素css选择器
        • options:
          • button:鼠标按键,默认left,值可为-[left, right, middle]
          • clickCount:点击次数
          • delay:鼠标按下和弹起之间的间隔时间,单位毫秒,默认为0
      • page.hover(selector):异步鼠标悬浮到某个元素
      • page.type(selector, text, [options]):异步在输入框输入内容
        • selector:元素css选择器
        • text:输入的内容
        • options:
          • dalay:每个字符输入的延迟,单位毫秒,默认0
      • page.focus(selector):异步聚焦到某个元素
      • page.keyboard.type(text):异步使用虚拟键盘模拟输入
      • page.keyboard.down(key):异步使用虚拟键盘模拟key键按下
      • page.keyboard.press(key):异步使用虚拟键盘模拟key键敲击
      • page.keyboard.up(key):异步使用虚拟键盘模拟key键弹起
      • page.mouse.click(x, y, [options]):异步使用虚拟鼠标模拟点击
        • x:x轴位置
        • y:y轴位置
        • options:
          • button:鼠标按键 - [left, right, middle]
          • clickCount:点击次数
          • delay:鼠标按下和弹起时间间隔
      • page.mouse.down(options):异步使用虚拟鼠标模拟按下,参数同上
      • page.mouse.up(options):异步使用虚拟鼠标模拟弹起,参数同上
      • page.mouse.move(x, y, [options]):异步使用鼠标模拟移动
        • x:移动到x轴位置
        • y:移动到y轴位置
        • options:
          • steps:每次移动的步长:默认为1,就意味着鼠标光标从原来位置到(x, y)位置之间闪现过去了。
      • page.touchscreen(x, y):异步模拟触摸

      7、绕过拦截

      • 隐身插件:puppeteer-extrapuppeteer-extra-plugin-stralth

      • 使用:

        import puppeteer from "puppeteer-extra";
        import pluginStealth from "puppeteer-extra-plugin-stralth";
        puppeteer.use(pluginStealth()); // 像express使用中间件那样
        // ......
        

      8、警告

      本文档仅用于开发页面的爬虫测试,请不要使用本文档的内容做非法事情,谢谢。

      你可能感兴趣的:(前端学习,爬虫,javascript,node.js,网络安全)