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

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

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、警告

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

相关文章:

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

Puppeteer 官方文档&#xff1a;https://puppeteer.bootcss.com/ 1、安装 puppeteer是一个node插件安装命令&#xff1a;npm i puppeteer 2、概念 无头浏览器&#xff1a;就是不打开浏览器的页面&#xff0c;直接进行浏览器后台操作 3、入门 引入&#xff1a;import pup…...

4.桥接模式

概况 桥接模式&#xff1a;将抽象部分与实现部分分离&#xff0c;使它们可以独立变化&#xff0c;通过组合而非继承的方式实现解耦。 业务场景 场景描述&#xff1a;开发一个跨平台的图形绘制系统&#xff0c;支持不同形状&#xff08;如圆形、矩形&#xff09;和不同渲染方式…...

Golang学习笔记_44——命令模式

Golang学习笔记_41——观察者模式 Golang学习笔记_42——迭代器模式 Golang学习笔记_43——责任链模式 文章目录 一、核心概念1. 定义2. 解决的问题3. 核心角色4. 类图 二、特点分析三、适用场景1. 事务管理系统2. 多媒体遥控器3. 操作审计系统 四、Go语言实现示例五、高级应用…...

算法中的背包问题详解:部分背包与0-1背包

1. 背包问题概述 背包问题是组合优化中的经典问题&#xff0c;其核心目标是&#xff1a;在给定容量的背包中装入一组物品&#xff0c;使得物品的总价值最大化。根据物品是否可分割或重复选择&#xff0c;背包问题分为多个变种&#xff0c;其中最常见的两种是&#xff1a; 部分…...

【单片机通信技术】STM32 HAL库 SPI主从机通过串口发送数据

一、说明 使用STM32F103C8T6最小系统板&#xff0c;让板载SPI1与SPI2通信&#xff0c;通过串口收发数据。本文章说明了在配置与编写时遇到的一些问题&#xff0c;以及详细说明如何使用cubeMAX进行代码编写。 二、CubeMAX配置 1.时钟配置选择外部高速时钟 2.系统模式与时钟配…...

laravel中 添加公共/通用 方法/函数

一&#xff0c;现在app 下面创建Common目录&#xff0c;然后在创建Common.php 文件 二&#xff0c;修改composer.json文件 添加这个到autoload 中 "files": ["app/Common/Common.php"]"autoload": {"psr-4": {"App\\": &quo…...

Jetpack Compose — 入门实践

一、项目中使用 Jetpack Compose 从此节开始,为方便起见,如无特殊说明,Compose 均指代 Jetpack Compose。 开发工具: Android Studio 1.1 创建支持 Compose 新应用 新版 Android Studio 默认创建新项目即为 Compose 项目。 注意:在 Language 下拉菜单中,Kotlin 是唯一可…...

P8686 [蓝桥杯 2019 省 A] 修改数组--并查集 or Set--lower_bound()的解法!!!

P8686 [蓝桥杯 2019 省 A] 修改数组--并查集 题目 并查集解析代码【并查集解】 Set 解法解析lower_bound代码 题目 并查集解析 首先先让所有的f&#xff08;i&#xff09;i&#xff0c;即每个人最开始的祖先都是自己&#xff0c;然后就每一次都让轮到那个数的父亲1&#xff08…...

应用案例 | 精准控制,高效运行—宏集智能控制系统助力SCARA机器人极致性能

概述 随着工业4.0的深入推进&#xff0c;制造业对自动化和智能化的需求日益增长。传统生产线面临空间不足、效率低下、灵活性差等问题&#xff0c;尤其在现有工厂改造项目中&#xff0c;如何在有限空间内实现高效自动化成为一大挑战。 此次项目的客户需要在现有工厂基础上进行…...

Greenplum6.19集群搭建

一&#xff0c;安装说明 1.1环境说明 1、首先确定部署的环境&#xff0c;确定下服务器的端口&#xff0c;一般默认是22的端口&#xff1b; 2、当前这份文档是服务器处于10022端口下部署的&#xff08;现场生产环境要求&#xff0c;22端口在生产环境存在安全隐患&#xff09;&…...

sqlserver中的锁模式 | SQL SERVER如何开启MVCC(使用row-versioning)【启用行版本控制减少锁争用】

文章目录 引言锁和隔离级别的关系锁模式之间兼容性I 隔离级别SQLServer默认的隔离级别为:“read commited” (已提交读)在SQLServer2005引入了基于行版本控制的隔离级别。SQL SERVER如何开启MVCC(使用row-versioning)sqlserver开启MVCC后的锁II sqlserver中的锁模式**1、共享…...

胜软科技冲刺北交所一年多转港股:由盈转亏,毛利率大幅下滑

《港湾商业观察》施子夫 近期&#xff0c;山东胜软科技股份有限公司&#xff08;以下简称&#xff0c;胜软科技&#xff09;递表港交所获受理&#xff0c;独家保荐机构为广发证券&#xff08;香港&#xff09;。 在赴港上市之前&#xff0c;胜软科技还曾谋求过A股上市&#x…...

Java零基础入门笔记:多线程

前言 本笔记是学习狂神的java教程&#xff0c;建议配合视频&#xff0c;学习体验更佳。 【狂神说Java】Java零基础学习视频通俗易懂_哔哩哔哩_bilibili 第1-2章&#xff1a;Java零基础入门笔记&#xff1a;(1-2)入门&#xff08;简介、基础知识&#xff09;-CSDN博客 第3章…...

Django 中,Form 和 ModelForm的用法和区别

在 Django 中,Form 和 ModelForm 是用于处理表单数据的两种主要方式。它们的主要区别在于是否与模型(Model)直接关联。以下是它们的用法、区别以及高级用法的详细说明: 一、Form 的使用 1. 基本用法 Form 是一个独立的表单类,不与任何模型直接关联。适用于需要手动定义字…...

tcp udp区别

TCP&#xff08;传输控制协议&#xff09; 和 UDP&#xff08;用户数据报协议&#xff09; 是两种常用的传输层协议&#xff0c;它们在数据传输方式、可靠性和应用场景等方面有显著区别。以下是它们的主要区别&#xff1a; 1. 连接方式 TCP&#xff1a;面向连接的协议。通信前需…...

数据类设计_图片类设计之1_矩阵类设计(前端架构基础)

前言 学的东西多了,要想办法用出来.C和C是偏向底层的语言,直接与数据打交道.尝试做一些和数据方面相关的内容 引入 图形在底层是怎么表示的,用C来表示 认识图片 图片是个风景,动物,还是其他内容,人是可以看出来的.那么计算机是怎么看懂的呢?在有自主意识的人工智能被设计出来…...

C++:入门详解(关于C与C++基本差别)

目录 一.C的第一个程序 二.命名空间&#xff08;namespace&#xff09; 1.命名空间的定义与使用&#xff1a; &#xff08;1&#xff09;命名空间里可以定义变量&#xff0c;函数&#xff0c;结构体等多种类型 &#xff08;2&#xff09;命名空间调用&#xff08;&#xf…...

GC安全点导致停顿时间过长的案例

GC安全点导致停顿时间过长的案例 前言安全点的概念案例分析解决方法如有需要收藏的看官&#xff0c;顺便也用发财的小手点点赞哈&#xff0c;如有错漏&#xff0c;也欢迎各位在评论区评论&#xff01; 前言 前段时间在使用G1垃圾收集时&#xff0c;因服务读写压力过大&#xf…...

linux下 jq 截取json文件信息

背景&#xff1a;通过‘登录名‘ 获取该对象的其他个人信息如名字。 环境准备&#xff1a;麒麟操作系统V10 jq安装包 jq安装包获取方式&#xff1a;yum install jq 或 使用附件中的rpm 或 git自行下载 https://github.com/stedolan/jq/releases/download/ 实现过程介绍&am…...

git lfs使用方法指南【在github保存100M以上大文件】

为了在 GitHub 仓库中存储超过 100MB 的大文件并避免推送失败&#xff0c;使用 Git LFS&#xff08;Large File Storage&#xff09; 是最佳解决方案。以下是详细步骤&#xff1a; 一、安装 Git LFS 下载并安装 Git LFS&#xff1a; 访问 Git LFS 官网 下载对应系统的安装包。或…...

躲藏博弈:概率论与博弈论视角下的最优策略选择

躲藏博弈&#xff1a;概率论与博弈论视角下的最优策略选择 1. 问题引入 想象这样一个场景&#xff1a;你在厕所里藏了一部手机&#xff0c;一周过去了&#xff0c;它仍未被发现。现在你面临一个决策&#xff1a; 选项A&#xff1a;继续将手机留在原处选项B&#xff1a;将手机…...

类加载器加载过程

今天我们就来深入了解一下Java中的类加载器以及它的加载过程。 一、什么是类加载器&#xff1f; 在Java中&#xff0c;类加载器&#xff08;Class Loader&#xff09;是一个非常重要的概念。它负责将类的字节码文件&#xff08;.class文件&#xff09;加载到Java虚拟机&#x…...

Python中dump、dumps和load、loads的异同

Python中dump、dumps和load、loads的异同 Python中dump、dumps和load、loads的异同 1. json.dump()和json.dumps() 1.1 json.dump()1.1 json.dumps() 2. json.load()和json.loads() 2.1 json.load()2.2. json.loads() 3. 总结对比4. 区分5. 完整代码 1. json.dump()和json.dum…...

Spring Boot整合ArangoDB教程

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 一、环境准备 JDK 17Maven 3.8Spring Boot 3.2ArangoDB 3.11&#xff08;本地安装或Docker运行&#xff09; Docker启动ArangoDB docker run -d --name ar…...

vue3框架的响应式依赖追踪机制

当存在一个响应式变量于视图中发生改变时会更新当前组件的所以视图显示&#xff0c;但是没有视图中不写这个响应式变量就就算修改该变量也不会修改视图&#xff0c;这是为什么&#xff1f;我们能否可以理解宽泛的理解为vue组件的更新就是视图的更新&#xff0c;单当视图中不存在…...

软件工程:软件需求之需求分析方法

目录 前言 需求分析方法 工具和方法 具体分析方法 对运行环境的影响 ​编辑 前言 本文重点介绍开展软件需求分析的方法。 需求分析方法 工具和方法 软件需求可以维护在ALM系统中&#xff0c;譬如&#xff1a;doors&#xff0c;codeBeamer等&#xff0c;JIRA适合互联网行…...

【网络编程】WSAAsyncSelect 模型

十、基于I/O模型的网络开发 接着上次的博客继续分享&#xff1a;select模型 10.8 异步选择模型WSAAsyncSelect 10.8.1 基本概念 WSAAsyncSelect模型是Windows socket的一个异步I/O 模型&#xff0c;利用这个模型&#xff0c;应用程序 可在一个套接字上接收以Windows 消息为基…...

视觉-语言模型-出发点CLIP--(精读论文)

阅读建议&#xff1a;配合这个源码分析阅读效果更加 研究背景和目的 介绍当前计算机视觉系统依赖固定类别标签训练的局限性&#xff0c;以及自然语言监督作为一种有潜力替代方式的研究现状。强调论文旨在探索从自然语言监督中学习可迁移视觉模型&#xff0c;实现零样本学习&a…...

docker本地部署RagFlow

1.安装 克隆仓库 git clone https://github.com/infiniflow/ragflow.git构建预建的Docker映像并启动服务器 cd ragflow/docker chmod x ./entrypoint.sh docker compose -f docker-compose.yml -p ragflow up -d修改ragflow/docker/.env文件 #RAGFLOW_IMAGEinfiniflow/ragfl…...

机器学习数学基础:44.多元线性回归

一、文字内容详解 1. 多重共线性的判断——皮尔逊相关系数 皮尔逊相关系数用于衡量自变量间的线性相关程度&#xff0c;取值范围为 ([-1, 1])&#xff1a; 绝对值越接近 (1)&#xff0c;变量间线性相关性越强&#xff1b;越接近 (0)&#xff0c;相关性越弱。在多重共线性判断…...