前端如何通过代码模拟用户操作以及puppeteer的使用

简介: 前端如何通过代码模拟用户操作以及puppeteer的使用

前言:


经过一段时间的尝试后,我写下这篇文章,先说结论。

前端是通过获取DOM元素后,执行如点击,获取焦点,设置滚动条高度等操作,总体而言,大部分场景够用,但是和其他爬虫或者类似按键精灵的软件是没法比的。核心差距在于,我们不能通过获取页面坐标,让鼠标主动去点击,也就是说js是被动的,它是通过监听用户的一系列操作去执行某些事,而不是我们通过代码去主动的做事。

那么,对于前端模拟用户操作,我有三板斧,下文会详细说明。

接下来我要好好介绍一下,puppeteer。为什么我要写它呢?因为它是基于node的,而且使用起来非常简单,它的功能很多,比如去截图,去爬取数据,去模拟用户操作,经典的用法是用作无头浏览器(headless),举个例子,使用它可以去登录网页输入账号密码进行跳转等操作。

下面这个图,网址是freebuf.com.我之前想利用前端操作DOM的方式操作,可是不行……感兴趣的可以尝试一下,欢迎交流~

93ad5ab65bcf462c8b185e6693ca1ed9.png

1.前端的“三板斧”


最常用的方式:

document.querySelector(".clsss").click() //以点击为例子

相对来说最好用的方式:

这个方法可以去看红宝书,有详细的介绍,比如固定步骤2有12个参数,原理其实就是分发一个事件,这个我用起来还是挺好用的。

我来讲一个使用场景:

之前react项目遇到一个bug,点击父组件的搜索按钮,子组件的插件要显示最新的搜索数据,但是子组件总是显示上一次的数据,只有点击子组件自己的搜索才可以显示最新的数据,于是我就用了这个方法,奇怪的是,这个方法失效了,最后是加了一个setInterval()定时器才解决的(setTimeout也不行)。

var e = document.createEvent("MouseEvents"); //固定步骤1
        e.initEvent("click", true, true); //固定步骤2
        document.getElementById(clickId).dispatchEvent(e); //固定步骤3

2.puppeteer的使用


它的使用及其简单,就两步。

有几个关键参数我说一下:默认是不打开浏览器的,但是可以设置为打开,方法是

puppeteer.launch({

   headless: false

 })

获取元素:page.$()

输入值:page.type('css选择器',‘要输入的值’,{ delay: 延迟 })

第一步:下载

npm i puppeteer

第二步,使用

你可以随便找个文件夹,或者在你的项目里面新建一个JS文件,如example.js,粘贴如下代码

此代码的功能是打开百度,并截屏

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

操作演示:

6ecaecbd467f4d17bd9a925d834ffacc.gif

模拟用户操作:

我使用node搭建了一个服务器,只要是用户访问某个接口,就直接打开freebuf.com,输入值然后回车确认跳转。

演示:

代码如下: 

const puppeteer = require('puppeteer')
async function demoTn () {
  const browser = await puppeteer.launch({
    headless: false,
    args: ['--no-sandbox', '--disable-setuid-sandbox']
  })
  const page = await browser.newPage()
  await page.goto('https://www.freebuf.com/')
  const loginInput = await page.$('#components-layout-demo-basic > section > main > div > div.container > div.container-left > div > div > div.bug-report-wraper > div > div.ant-select.ant-select-enabled.ant-select-no-arrow > div > div > div.ant-select-selection__placeholder')
  await loginInput.click()
  await page.type('#components-layout-demo-basic > section > main > div > div.container > div.container-left > div > div > div.bug-report-wraper > div > div.ant-select.ant-select-enabled.ant-select-no-arrow > div > div > div.ant-select-search.ant-select-search--inline > div > input', '555', { delay: 500 })
  page.keyboard.press('Enter')// 按下回车键
  // const loginInput2 = await page.$('#components-layout-demo-basic > section > header > div > div.header-right > div.user-view > div.search-cloud > span > span > span > button')
  // await loginInput2.click()
  // await browser.close()
}
exports.demoTn = demoTn

api.js

router.get('/getdetail', function (req, res) {
  res.send('返回数据…getdetail')
  setTimeout(() => {
    test.demoTn()
    console.log("执行demoTn")
  })
})
相关文章
|
11月前
|
人工智能 自然语言处理 前端开发
DeepSite:基于DeepSeek的开源AI前端开发神器,一键生成游戏/网页代码
DeepSite是基于DeepSeek-V3模型的在线开发工具,无需配置环境即可通过自然语言描述快速生成游戏、网页和应用代码,并支持实时预览效果,显著降低开发门槛。
1821 93
DeepSite:基于DeepSeek的开源AI前端开发神器,一键生成游戏/网页代码
|
缓存 前端开发 JavaScript
利用代码分割优化前端性能:策略与实践
在现代Web开发中,代码分割是提升页面加载性能的有效手段。本文介绍代码分割的概念、重要性及其实现策略,包括动态导入、路由分割等方法,并探讨在React、Vue、Angular等前端框架中的具体应用。
|
11月前
|
前端开发 JavaScript 安全
|
10月前
|
自然语言处理 前端开发 IDE
用通义灵码全新智能体+MCP实现从设计稿到前端代码,个人免费用
通义灵码全新升级,发布国内首个支持“自主决策+工具链闭环”的编程智能体,面向个人免费!新增功能包括智能体模式、混合推理模型Qwen3支持、全面集成MCP中文社区(涵盖2400+服务)及长期记忆能力。用户可通过IDE插件使用,兼容主流开发环境如JetBrains、VS Code和Visual Studio。教程展示如何将MasterGo设计稿转化为前端代码,简化开发流程。探索链接:[通义灵码官网](https://lingma.aliyun.com/)。
|
JavaScript 前端开发 Docker
前端全栈之路Deno篇(二):几行代码打包后接近100M?别慌,带你掌握Deno2.0的安装到项目构建全流程、剖析构建物并了解其好处
在使用 Deno 构建项目时,生成的可执行文件体积较大,通常接近 100 MB,而 Node.js 构建的项目体积则要小得多。这是由于 Deno 包含了完整的 V8 引擎和运行时,使其能够在目标设备上独立运行,无需额外安装依赖。尽管体积较大,但 Deno 提供了更好的安全性和部署便利性。通过裁剪功能、使用压缩工具等方法,可以优化可执行文件的体积。
1097 3
前端全栈之路Deno篇(二):几行代码打包后接近100M?别慌,带你掌握Deno2.0的安装到项目构建全流程、剖析构建物并了解其好处
|
缓存 监控 前端开发
探索前端性能优化:关键策略与代码实例
本文深入探讨前端性能优化的关键策略,结合实际代码示例,帮助开发者提升网页加载速度和用户体验,涵盖资源压缩、懒加载、缓存机制等技术。
|
Web App开发 缓存 监控
前端性能优化实战:从代码到部署的全面策略
前端性能优化实战:从代码到部署的全面策略
360 1
|
Web App开发 前端开发 JavaScript
前端性能优化实战:从代码到部署的全面指南
前端性能优化实战:从代码到部署的全面指南
346 1
|
前端开发 JavaScript
前端界的革命:掌握这些新技术,让你的代码简洁到让人惊叹!
前端技术的快速发展带来了许多令人惊叹的新特性。ES6及其后续版本引入了箭头函数、模板字符串等简洁语法,极大减少了代码冗余。React通过虚拟DOM和组件化思想,提高了代码的可维护性和效率。Webpack等构建工具通过模块化和代码分割,优化了应用性能和加载速度。这些新技术正引领前端开发的革命,使代码更加简洁、高效、可维护。
183 2
|
前端开发 JavaScript 测试技术
前端工程师的必修课:如何写出优雅、可维护的代码?
前端工程作为数字世界的门面,编写优雅、可维护的代码至关重要。本文从命名规范、模块化设计、注释与文档、遵循最佳实践四个方面,提供了提升代码质量的方法。通过清晰的命名、合理的模块划分、详细的注释和持续的学习,前端工程师可以写出高效且易于维护的代码,为项目的成功打下坚实基础。
213 2

热门文章

最新文章

  • 1
    前端如何存储数据:Cookie、LocalStorage 与 SessionStorage 全面解析
    882
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
    403
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
    305
  • 4
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
    278
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
    401
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
    586
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
    626
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
    191
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
    539
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
    347