Puppeteer基础知识(一)

这篇具有很好参考价值的文章主要介绍了Puppeteer基础知识(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Puppeteer基础知识(一)

Puppeteer基础知识(一),Puppeteer学习及实践,自动化,爬虫,puppet,node.js

一、简介

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
  2. Liunx中无法使用问题https://github.com/CatsAndMice/blog/issues/66

以上就是基础知识的学习。文章来源地址https://www.toymoban.com/news/detail-727684.html


到了这里,关于Puppeteer基础知识(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 90天玩转Python—11—基础知识篇:Python自动化操作Excel:读写、增删改查、分组统计全攻略

    90天玩转Python—01—基础知识篇:C站最全Python标准库总结 90天玩转Python--02--基础知识篇:初识Python与PyCharm 90天玩转Python—03—基础知识篇:Python和PyCharm(语言特点、学习方法、工具安装) 90天玩转Python—04—基础知识篇:Python编程基础:标识符、保留字、注释、多行语句、p

    2024年04月11日
    浏览(43)
  • 【Flutter·学习实践·UI篇】基础且重要的UI知识

    参考学习官网:《Flutter实战·第二版》  学习前先记住:Flutter 中万物皆为Widget,心中默念3次以上铭记于心。 这一点和开发语言Dart的变量一切皆是对象的概念,相互对应。 在前面的介绍中,我们知道在Flutter中几乎所有的对象都是一个 widget 。与原生开发中“控件”不同的是

    2024年02月15日
    浏览(32)
  • 线性代数入门:基础知识与实践

    线性代数是数学的一个分支,主要研究的是线性方程组和向量空间等概念。它在现代科学和工程领域中具有广泛的应用,如计算机图形学、机器学习、信号处理、金融等。线性代数的核心内容包括向量、矩阵、线性方程组的求解、向量空间等。在本文中,我们将从线性代数的

    2024年02月22日
    浏览(56)
  • 云计算基础知识及实践指南(附实例代码)

    作者:禅与计算机程序设计艺术 随着互联网的飞速发展,各种形式的应用软件的流量日益增长,用户的数据也越来越多,处理这些数据所需的时间也越来越长。云计算为解决这一问题提供了一种新方式。它通过将数据、应用程序、资源以及服务都放置在互联网提供者所管理的

    2024年02月08日
    浏览(36)
  • 自动驾驶技术的基础知识

    自动驾驶技术是现代汽车工业中的一项革命性发展,它正在改变着我们对交通和出行的理解。本文将介绍自动驾驶技术的基础知识,包括其概念、历史发展、分类以及关键技术要素。 自动驾驶是一种先进的交通技术,它允许汽车在没有人类干预的情况下完成驾驶任务。这意味

    2024年02月07日
    浏览(52)
  • 【ASP.NET Core 基础知识】--最佳实践和进阶主题--微服务和容器化

    Tip:想要了解并学习微服务和容器化的知识,请跳转到《Docker极简教程》 一、微服务概述 1.1 什么是微服务? 微服务(Microservices)是一种软件架构风格,其中软件系统被划分为一组小型、自治的服务单元,这些服务单元围绕着业务能力进行组织,并通过轻量级的通信机制相

    2024年02月19日
    浏览(62)
  • 【前端知识】React 基础巩固(三十二)——Redux的三大原则、使用流程及实践

    单一数据源 整个应用程序的state被存储在一颗object tree 中,并且这个object tree 只存储在一个store中; Redux并没有强制让我们不能创建多个Store,但是那样做不利于数据维护; 单一的数据源可以让整个应用程序的state变得方便维护、追踪、修改; State是只读的 唯一修改State的方法

    2024年02月15日
    浏览(60)
  • web自动化测试入门篇03——selenium使用教程_(2)在上述学习基础上,自行选择一个合适的网站,进一步在实践中去运用selenium webd(1)

    先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7 深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前! 因此收集整理了一份《2024年最新大数据全套学习资料》,

    2024年04月27日
    浏览(64)
  • 机器学习基础知识

    卷积神经网络中,batch是什么? 在卷积神经网络(Convolutional Neural Network,CNN)中,batch是指每次输入模型的一组样本。通常情况下,训练数据集非常庞大,批量处理可以提高计算效率和并行化能力。 在训练过程中,将训练数据集分为多个批次(batches),每个批次包含一定数

    2024年02月16日
    浏览(51)
  • Javascript 基础知识学习

    参考自:https://www.w3cschool.cn/javascript/ JavaScript 是互联网上最流行的脚本语言,这门语言可用于 HTML 和 web,更可广泛用于服务器、PC、笔记本电脑、平板电脑和智能手机等设备。 JavaScript 是一种轻量级的编程语言。 JavaScript 是可插入 HTML 页面的编程代码。 JavaScript 插入 HTML 页面

    2024年02月05日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包