当前位置: 首页 > news >正文

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

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<object>: 为每个页面设置一个默认视图窗口大小,默认800*600
      • width:页面宽度
      • height:页面高度
      • deviceScaleFactor:dpr,默认为1
      • null:设置为null就禁用视图窗口
    • args<array>:给浏览器实例传递的其他参数
      • “–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、警告

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

相关文章:

  • 【达梦数据库】代理用户的使用
  • 网页制作11-html,css,javascript初认识のCCS样式列表(下)
  • SD-WAN解决方案架构(SD WAN Solution Architecture)
  • 如何确保爬虫遵守1688的使用协议
  • HTML——标题标签与段落标签
  • Mac安装jdk教程
  • JavaWeb6、Servlet
  • Android 低功率蓝牙之BluetoothGattCallback回调方法详解
  • Android 低功率蓝牙之BluetoothGattCharacteristic详解
  • 极狐GitLab 17.9 正式发布,40+ DevSecOps 重点功能解读【一】
  • “深入浅出”系列之Linux篇:(12)C++网络编程
  • nvm 让 Node.js 版本切换更灵活
  • 记录一些面试遇到的问题
  • Linux系统之配置HAProxy负载均衡服务器
  • powermock,mock使用笔记
  • 重生之我在 CSDN 学习 KMP 算法
  • Linux——Docker容器内MySQL密码忘记了如何查看
  • 信息管理之信息的萃取方法--使用渐进归纳法逐步提取高可见性笔记
  • os-copilot安装和使用体验测评
  • PHP 矩形面积和周长的程序(Program for Area And Perimeter Of Rectangle)
  • 缅甸发生5.0级地震
  • 浙江一家长称小学老师打孩子还威胁要从3楼扔下,当地警方已立案
  • 出走的苏敏阿姨一路走到了戛纳,这块红毯因她而多元
  • 上海:到2027年,实现近海航线及重点海域5G网络高质量覆盖
  • 混乱的5天:俄乌和谈如何从充满希望走向“卡壳”
  • 向猫学习禅修之后,你会发现将生活降格为劳作是多么愚蠢