Puppeteer基础知识(一)

news/2024/11/28 21:45:53/

Puppeteer基础知识(一)

在这里插入图片描述

    • Puppeteer基础知识(一)
        • 一、简介
        • 二、其他一些自动化测试工具
        • 三、安装与使用
        • 四、Puppeteer常用命令
        • 五、常见问题解决:

一、简介

Puppeteer 是一个强大而灵活的工具,可以用于网页爬虫、自动化测试、性能分析等场景。能够模拟用户行为、拦截网络请求、处理弹窗、模拟设备等,可以让我们更灵活地控制浏览器和页面。不仅能够启动web进行测试,也能够启动web H5 模拟器进行测试。
Puppeteer 是一个 Node 库,它提供了一个高级 API 来通过 DevTools 协议控制 Chromium 或 Chrome。Puppeteer 默认以 headless 模式运行,但是可以通过修改配置文件运行“有头”模式。

二、其他一些自动化测试工具

● Selenium/WebDriver 专注于跨浏览器自动化;它的价值主张是一个适用于所有主要浏览器的单一标准 API。多种语言支持。官网地址:https://www.selenium.dev/zh-cn/documentation/

● Puppeteer 比较轻量化,专注于 Chromium;其价值主张是更丰富的功能和更高的可靠性。官网地址:https://pptr.dev/

● nightmare 链式调用方式,已经不再维护。官网地址: https://github.com/segment-boneyard/nightmare

Selenium/WebDriver代码格式

const {Builder, By, Key, until} = require('selenium-webdriver');(async function example() {let driver = await new Builder().forBrowser('firefox').build();try {await driver.get('http://www.google.com/ncr');await driver.findElement(By.name('q'));.sendKeys('webdriver', Key.RETURN);await driver.wait(until.titleIs('webdriver - Google Search'), 1000);} finally {await driver.quit();}
})();

Puppeteer代码风格

const puppeteer = require('puppeteer');puppeteer.launch().then(async browser => {const page = await browser.newPage();await page.goto('https://example.com');await browser.close();
});

Nightmare 代码风格:链式调用方式https://github.com/segment-boneyard/nightmare

const Nightmare = require('nightmare')
const nightmare = Nightmare({ show: true })nightmare.goto('https://duckduckgo.com').type('#search_form_input_homepage', 'github nightmare').click('#search_button_homepage').wait('#r1-0 a.result__a').evaluate(() => document.querySelector('#r1-0 a.result__a').href).end().then(console.log).catch(error => {console.error('Search failed:', error)})
三、安装与使用

在项目中使用 Puppeteer:

npm i puppeteer
# or "yarn add puppeteer"

然后在项目中引用使用,看看下面最简单的例子
创建example.js文件,然后增加以下内容:

const puppeteer = require('puppeteer');(async () => {const browser = await puppeteer.launch();const page = await browser.newPage();await page.goto('https://example.com');await page.screenshot({path: 'example.png'});await browser.close();
})();

在命令行中执行

node example.js

这样就会打开一个浏览器,进行执行文件中的命令。

四、Puppeteer常用命令

中文文档: https://puppeteer.bootcss.com/api#class-browserfetcher

常用命令

  • 选择器
    page.$(selector)
    page.$$(selector)
    它们的功能类似于document.querySelector和document.querySelectorAll。
const frontEnd = await page.$('span[data-type=frontend]');
frontEnd.click();
  • 等待几毫秒
await page.waitFor(500); 
await page.waitForTimeout(2600);
  • 等待某个 JavaScript 函数返回 true
await page.waitFor(() => !document.querySelector('.ant-spin.ant-spin-spinning'));
  • 向某个 Input 中输入字符
await page.type('#username', '18154');
await page.type('#session_email_or_mobile_number', userName);
  • 点击某个节点
await page.click('#btn-submit');
  • 截取网页的屏幕截图
    备注 在OS X上 截图需要至少1/6秒。
await page.screenshot({ path: '../images/publishClick.png', fullPage: true });
  • 生成 PDF 文件
await page.pdf({path: 'example.pdf'});
  • 在浏览器中执行一段 JavaScript 代码
await page.evaluate(() => alert('1'));
  • 返回页面的完整 html 代码,包括 doctype。
await page.content()
  • 返回操作
await page.goBack([options])
  • 获取当前页面的标题
await page.title();
  • 获取某一个节点的某个属性
const searchValue = await page.$eval('#search', el => el.value);
const preloadHref = await page.$eval('link[rel=preload]', el => el.href);
const text = await page.$eval('.text', el => el.textContent);
const html = await page.$eval('.main-container', e => e.outerHTML);
  • 获取某一类节点的某个属性集合
const textArray =await page.$$eval('.text', els => Array.from(els).map(el => el.textContent));

事件监听

  • 监听发出的网络的请求
function logRequest(interceptedRequest) {console.log('A request was made:', interceptedRequest.url());
}
page.on('request', logRequest);
// 清理监听
page.removeListener('request', logRequest); 
  • 监听收到的输出,用于打印
page.on('console', msg => console.log('PAGE LOG:', msg.text()));
  • 页面关闭时触发
function closePage() {console.log('closePage.........');
}
page.on('close', closePage);

五、常见问题解决:
  1. https://pptr.dev/troubleshooting

以上就是基础知识的学习。



http://www.ppmy.cn/news/1141109.html

相关文章

深度学习——权重衰减(weight_decay)

深度学习——权重衰减(weight_decay) 文章目录 前言一、权重衰减1.1. 范数与权重衰减1.2. 高维线性回归1.3. 从零开始实现1.3.1.初始化模型参数1.3.2. 定义L₂范数惩罚1.3.3. 定义训练代码实现1.3.4. 不管正则化直接训练1.3.5. 使用权重衰减 1.4. 简洁实现 总结 前言…

JavaScript DOM 函数大全详解(使用最新的 JS 语法)

JavaScript DOM 函数大全详解(使用最新的 JS 语法) JavaScript 的 Document Object Model(DOM)是用于操作网页内容的编程接口。在最新的 JavaScript 语法下,我们有很多方便和高效的方法来处理 DOM。下面是一些常用 DO…

【C++】-C++11中的知识点(上)--右值引用,列表初始化,声明

💖作者:小树苗渴望变成参天大树🎈 🎉作者宣言:认真写好每一篇博客💤 🎊作者gitee:gitee✨ 💞作者专栏:C语言,数据结构初阶,Linux,C 动态规划算法🎄 如 果 你 …

[Android] Input事件分发流程之InputReader(2)

继IMS构造方法分析完成后,看看IMS中的start方法 public void start() {Slog.i(TAG, "Starting input manager");// 之前初始化了InputManager->inputDispatcher&&inputReader// 这里开始start它们,并且会创建InputThread线程,也就…

Acwing.790 数的三次方根

题目 给定一个浮点数n,求它的三次方根。 输入格式 共一行,包含一个浮点数n。 输出格式 共—行,包含一个浮点数,表示问题的解。注意,结果保留6位小数。 数据范围 -10000 ≤n ≤10000 输入样例: 1000.00输出样例…

竞赛 机器学习股票大数据量化分析与预测系统 - python 竞赛

文章目录 0 前言1 课题背景2 实现效果UI界面设计web预测界面RSRS选股界面 3 软件架构4 工具介绍Flask框架MySQL数据库LSTM 5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 机器学习股票大数据量化分析与预测系统 该项目较为新颖&am…

线性表相关知识

1.简述 线性表,全名为线性存储结构。使用线性表存储数据的方式可以这样理解,即“把所有数据按照顺序(线性)的存储结构方式,存储在物理空间”。 按照空间分类: 顺序存储结构:数据依次存储在连续…

SQLServer安装

SQL Server安装指南:从下载到配置 SQL Server是一款强大的关系型数据库管理系统,广泛应用于企业和组织中,以其卓越的性能和丰富的功能而闻名。但要充分利用SQL Server的潜力,首先需要正确安装和配置它。在这篇博客中,我…