iis服务器助手广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >Puppeteer中怎么实现一个自动化机器人
  • 857
分享到

Puppeteer中怎么实现一个自动化机器人

2024-04-02 19:04:59 857人浏览 安东尼
摘要

这篇文章给大家介绍Puppeteer中怎么实现一个自动化机器人,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Puppeteer 是 node.js 的一个函数库,可用来操控浏览器,是

这篇文章给大家介绍Puppeteer中怎么实现一个自动化机器人,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

Puppeteer 是 node.js 的一个函数库,可用来操控浏览器,是 Google 的项目,可以应用的范围包括:前端自动化测试爬虫、表单提交等。

selenium vs Puppeteer

之前有过用 python 配合 Selenium 的经验,不过如果是做爬虫、自动化操作用 Puppeteer 还是非常方便的,安装简单快速,api 也容易使用。美中不足的是它只支持 Chromium 以下是两者的比较,仅供参考:

Puppeteer中怎么实现一个自动化机器人

由于 Puppeteer 是用 node.js 写的,所以必须要先安装 Node。

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区

  2. 可以至官网 下载

  3. 如果用 Mac 可以使用 https://nodejs.org/en/

安装完后可以在 terminal 输入 node -v 检查是否安装成功

Puppeteer中怎么实现一个自动化机器人

然后到要开发的项目路径下输入 npm init -y 初始化项目,接着 npm i puppeteer ,安装的时候会发现它会连同 Chromium 一同安装。

Puppeteer中怎么实现一个自动化机器人

安装成功后就可以开始了。

一个简单的例子

新增一个文件 main.js ,并复制以下代码:

const puppeteer = require('puppeteer');  (async () => {    // 开启 browser   const browser = await puppeteer.launch({         headless: false   });   // 新增分页   const page = await browser.newPage();   // 到自己的博客网站   await page.goto(`Https://www.myblog.com/`);   // 等待订阅按钮出现   await page.waitForSelector("button[class='subscribe-button pill-button']");   // 点击订阅按钮   await page.click("button[class='subscribe-button pill-button']"); })();

接着到终端下输入 node main.js 执行。

解释代码

前面的代码先引入 Puppeteer,以便后续使用,接下来可以看到用 async 以及 () => , async 表示函数要用到异步操作, () => 则是 JS 的箭头函数。

const puppeteer = require('puppeteer');

接下来是用 Puppeteer 打开一个浏览器 ( Chromium ),其中可以看到我们设了参数 headless : false ,如果是设定为 true ,会开启没有界面的无头浏览器,如果设定 false ,就会开一个浏览器窗口。

const browser = await puppeteer.launch({     headless: false });

这段就很简单了,它会帮你在浏览器开一个新的分页。

const page = await browser.newPage();

这段也很容易,看到 goto 就可以猜到会帮你导向后方指定的网址。

await page.goto(`https://b123105.blogspot.com/`);

最后这段代码用到了 click 这个方法,它能够帮你点击后面指定的元素,可以看到我是指定 class = subscribe-button pill-button 的 <button> 。

waitForSelector 的作用是,在执行时整个操作速度会很快,有时可能这个元素都很没出现,就让它去点击,有可能会找不到。所以先让它等待指定元素出现后,再去点击。

await page.waitForSelector("button[class='subscribe-button pill-button']");  await page.click("button[class='subscribe-button pill-button']");

把项目容器

首先下载 Docker,这里就不再赘述。接下来在项目目录下创建 Dockerfile ,把下面的脚本代码复制粘贴。

然后构建镜像: docker build -t puppeteer-bot . 。

构建完成后就执行 docker run -d --name puppeteer-bot-timeline puppeteer-bot:latest 。

之后可以通过 docker logs puppeteer-bot-timeline 查看 console.log 的内容 ( 如果有的话 )。

要记得 headless 要设定为 true 才能运行。
FROM node:11-slim # 下载 chromium 在 docker 运行时所需组件 RUN apt-get update && apt-get install -yq libGConf-2-4 RUN apt-get update && apt-get install -y wget --no-install-recommends \     && wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \     && sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' \     && apt-get update \     && apt-get install -y google-chrome-unstable \       --no-install-recommends \     && rm -rf /var/lib/apt/lists/* \     && apt-get purge --auto-remove -y curl \     && rm -rf /src/*.deb  ADD https://GitHub.com/Yelp/dumb-init/releases/download/v1.2.0/dumb-init_1.2.0_amd64 /usr/local/bin/dumb-init RUN chmod +x /usr/local/bin/dumb-init USER root ENV TZ=Asia/Shanghai # 转换时区,非必要 RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone COPY . /app/ WORKDIR app RUN npm install EXPOSE 8084 ENTRYPOINT ["dumb-init", "--"] CMD ["node", "main.js"]

容器打包时的一些坑

接下来是我在用 Docke 打包过程遇到的一些问题:

1. Puppeteer 安装 Chromium 时会缺少一些组件

本来用 docker 封装是很容易的,安装 node 然后 npm install 就行了,但是在实际操作时一直报错说 Chromium 缺少组件。后来去 Puppeteer 的 issue 上查到原来安装 Puppeteer 时会自动安装 Chromium,但要在 Docker 上运行的相关组件并不会自动下载。

2. 页面焦点问题

在开发时我是通过开启一个浏览器,然后持续开三个分页来进行操作,希望能加快处理的速度。但是发现当 headless:false 时,会同时开启三个分页,但只有被设置为焦点的当前页面在执行后面的脚本,另外两页并没有。因为在开发过程中执行时 tab 页会被关闭,所以接下来第二个 tab 中的页面获得焦点后会再开始运行。

在 issue 中也看到有人遇到了同样的问题,只有在 headless:true 的时候会同时处理,但目前还没找到其他解法。

3. Page Crash 问题

上面有提到我在一个浏览器上操作三个分页,放在 docker 中运行,总是遇到 Page Crash 问题,第一反应是可能内存不足,在 issue 上查到原来在打开浏览器时要加上 --disable-dev-shm-usage 。

原文是这样说的:

By default, Docker runs a container with a /dev/shm shared memory space 64MB. This is typically too small for Chrome and will cause Chrome to crash when rendering large pages. To fix, run the container with docker run --shm-size=1gb to increase the size of /dev/shm. Since Chrome 65, this is no longer necessary. Instead, launch the browser with the --disable-dev-shm-usage flag: const browser = await puppeteer.launch({ args: ['--disable-dev-shm-usage'] });

关于Puppeteer中怎么实现一个自动化机器人就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: Puppeteer中怎么实现一个自动化机器人

本文链接: https://www.lsjlt.com/news/77464.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Puppeteer中怎么实现一个自动化机器人
    这篇文章给大家介绍Puppeteer中怎么实现一个自动化机器人,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Puppeteer 是 Node.js 的一个函数库,可用来操控浏览器,是 ...
    99+
    2024-04-02
  • 怎么用Python写一个自动化机器人消灭广告
    这篇文章主要介绍“怎么用Python写一个自动化机器人消灭广告”,在日常操作中,相信很多人在怎么用Python写一个自动化机器人消灭广告问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Python写一个自...
    99+
    2023-06-16
  • vue中怎么实现一个自动化表单
    这期内容当中小编将会给大家带来有关vue中怎么实现一个自动化表单,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。通过json配置快速生成表单的vue plugin。设计目标...
    99+
    2024-04-02
  • Python中怎么实现一个聊天机器人
    Python中怎么实现一个聊天机器人,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1. 创建虚拟环境pipenv是一个轻松创建虚拟环境的python库。pip ins...
    99+
    2023-06-16
  • Python机器人自动写作怎么实现
    本文小编为大家详细介绍“Python机器人自动写作怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python机器人自动写作怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新...
    99+
    2024-04-02
  • Node中怎么实现一个自动化部署平台
    Node中怎么实现一个自动化部署平台,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。业务需求这个JSSDK,主要作用是在后端了为...
    99+
    2024-04-02
  • vue.js中怎么实现一个自动求和计算
    这期内容当中小编将会给大家带来有关vue.js中怎么实现一个自动求和计算,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、导入vue.js可以用cdn,也可以用内嵌去官网...
    99+
    2024-04-02
  • Python中怎么实现SQL自动化
    这篇文章给大家介绍Python中怎么实现SQL自动化,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。从基础开始import pyodbc from datetime import&...
    99+
    2023-06-16
  • 怎么用纯CSS实现一个人独自行走的动画效果
    小编给大家分享一下怎么用纯CSS实现一个人独自行走的动画效果,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!   代码解读   定义dom,容器中包含3个元素,分别代表头、身体和脚: ...
    99+
    2024-04-02
  • 怎么在Android中实现一个自动打卡功能
    这篇文章给大家介绍怎么在Android中实现一个自动打卡功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。提前准备首先我们需要一直不用的Android手机,插上公司的电源。下载安装钉钉并设置为极速打卡。自动打开我们只需...
    99+
    2023-06-14
  • Vue中怎么实现自动化路由
    Vue中怎么实现自动化路由,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。为什么要自动化路由路由自动化在于解决以下的问题:每次新...
    99+
    2024-04-02
  • Node中怎么实现自动化部署
    这期内容当中小编将会给大家带来有关Node中怎么实现自动化部署,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。配置脚本这段脚本内容是我们需要服务器自动执行的# a...
    99+
    2024-04-02
  • mysql中怎么实现自动化备份
    这期内容当中小编将会给大家带来有关mysql中怎么实现自动化备份,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。mysql自动化备份方案 一、配置服务器1、撰写自...
    99+
    2024-04-02
  • Jenkins中怎么实现自动化测试
    Jenkins是一个持续集成工具,可以通过配置自动化测试任务来实现自动化测试。以下是在Jenkins中实现自动化测试的一般步骤: ...
    99+
    2024-03-05
    Jenkins
  • C#中怎么实现自动化文档
    这篇文章将为大家详细讲解有关C#中怎么实现自动化文档,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。C#文档自动化初步认识:在C#中文档注释对应的符号是:///。但光使用它还是不能为我们产生代...
    99+
    2023-06-17
  • vue中怎么实现一个自动补全的输入框
    本篇文章给大家分享的是有关vue中怎么实现一个自动补全的输入框,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。显示div将内容撑开,改变其他组件...
    99+
    2024-04-02
  • selenium UI自动化怎么实现
    本篇内容介绍了“selenium UI自动化怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一.前言1.1项目框架项目如何使...
    99+
    2023-06-22
  • Redis中怎么实现一个自增ID计数器
    这期内容当中小编将会给大家带来有关Redis中怎么实现一个自增ID计数器,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。在关系型数据库MySQL中我们可以通过设置字段属性为...
    99+
    2024-04-02
  • Python中怎么使用Playwright实现自动化
    这篇文章将为大家详细讲解有关Python中怎么使用Playwright实现自动化,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1、Playwright介绍Playwright是一个强大的Py...
    99+
    2023-06-15
  • Jenkins中怎么实现Pipeline自动化部署
    本篇文章给大家分享的是有关Jenkins中怎么实现Pipeline自动化部署,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。使用Jenkins前的一些设置为了快速搭建Jenkin...
    99+
    2023-06-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作