Puppeteer项目结构梳理

news2025/1/11 12:46:02

最近接触了一个个人感觉很奈斯的项目,故记录思路如下:

puppeteer项目梳理:
入口文件 run.js
入口命令 node run.js YourConfig.json

大概逻辑


1、我们可以在自己的config.json里面设置好
①、登录的用户名密码;aws或其它服务器的access等id,accessKey, region等信息;
cookie的路径,要上传到s3或者oss等对象存储平台的文件的路径;
oss和s3的比较
②、要运行的命令放在一个modules{}里面,proxy的设置,headless:true等访问浏览器的设置。

2、爬虫最好是运用模块化思想,把重复用的功能单独的拎出来
在run.js里面我们可以import我们自己其他的js文件。
①首先是import {LoadConfig} from config.js
这个LoadConfig主要是存储从config.解析的变量。
const argv = process.argv.slice(2);
const configPath = argv[0];
const config = JSON.parse(fs.readFileSync(configPath));

这是关于node的process相关内容的参考文章

类似这种,把config.json的信息都解析到数组argv里面,然后按照不同key,设置不同键值对,最后以export LoadConfig导出。
通过这种方式,我们就看把config.json里面的配置按照键值对保存了LoadConfig的数组里面。

②关于s3的配置方法封装到S3Init.js文件中,里面包含了s3的读写文件名,判断文件存在,读写文件流等function。
再引入一个包含save 和skip文件的storage.js方法,主要功能是如果s3已经存在了同名文件在,则判断跳过,避免爬取重复文件。
再映入一个date.js,主要是封装了判断日期,更改日期名字,获取当前日期等功能。

③关键引入import { createPage, closePage } from “./yourpath/Parsebrowser.js”;
这是主要的启动方法,通过const page = await createPage(getCookie, config.headless, config.proxy);去进行爬取,
Parsebrowser.js里面可以设置具体的chrome.exe位置,主要是为了打开浏览器。

④最关键的一步,
import { LoadConfig } from “./yourpath/config.js”;
const config = LoadConfig();
再打开到浏览器之后,在try下,去引入config.modules。因为config.modules里面是不同的js文件,每个js文件代表这一个页面的下载逻辑,
并且以{export download} 形式返回。
我们调用const page = await createPage(getCookie, config.headless, config.proxy),可以通过不同cookies访问网站;
再调用download变量方法就可以进去爬取不同页面(因为不同页面暴露的都是同一个download方法,可以通过循环依次爬取。
同时在同一个网站里,我们可以设置复用的download.js去点击下载按钮,可以设置复用的selectdate.js去选择日期等。

总结:
将关于s3的配置,打开浏览器,访问不同页面都分别独立出来。并且通过config.json去定义想要运行的js文件(所有爬虫js返回一个相同的变量),当运行到入口文件run.js时,for循环会将config.json的Modules定义的js爬虫文件一 一运行下去。
极大提高了代码复用效率以及通过json配置控制爬取页面的灵活性。

细节:
在爬取元素,有些插件的元素在页面element找不到,可能在js里面。比如日期控件picker 的ant-select-dropdown-menu类,就写在了js里面动态加载进去。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/379932.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二叉树的性质(概念/特性/存储结构)

目录1 二叉树的定义及主要特性1.1 二叉树的定义1.2 特殊二叉树1.2.1 满二叉树1.2.2 完全二叉树1.2.3 二叉排序树1.2.4 平衡二叉树1.3 二叉树的性质1.3.1 非空二叉树上的叶结点数1.3.2 非空二叉树第k层结点数1.3.3 高度为h的二叉树至多结点数1.3.4 完全二叉树结点与双亲的关系1.…

电子价格标签-系统结构

一、V2.4基站软件电子标签 接收PC下达的操作指令,解析后再通过RF发送给电子标签,接收路由器发送的数据信息并解析,更新数据。 1. 2.1寸电子价签 2. 2.9寸电子价签 ​ 3. 4.2寸电子价签 ​ 4. 7.5寸电子价签 ​ 5. 10.2寸电子价签 二、V4…

当审稿人回复这些审稿意见时,其实是在暗示你这些细节需要注意

当我们翘首以盼SCI论文投稿的审稿决定时。心情往往是复杂的,想收到审稿决定又担心收到的是不好的审稿决定。不管审稿结论如何,我们首先要明白的是那几个简短字母的审稿决定对我们来说,意味着什么。只有这样才有可能既不妄自菲薄也不杞人忧天。…

Intel CSME 简述

SME 算是 Intel X86 PC 上最神秘的部分了,本文根据 us-19-Hasarfaty-Behind-The-Scenes-Of-Intel-Security-And-Manageability-Engine 一文写成。讲述内容无法证伪,各位随便听听即可,了解这些能够帮助BIOS 工程师更好的理解一些操作的实现。文章基于 Intel 第八代第九代CPU(…

springCloud之seata

一、Seata是什么 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。 官方文档 https://seata.io/zh-cn/docs/overview/wha…

发现新大陆——原来软件开发根本不需要会编码(看我10分钟应用上线)

目录 一、前言 二、官网基础功能及搭建 三、体验过程 01、连接数据源 02、设计表单 03、流程设计 04、图表呈现 05、组织架构设置 五、效率评价 六、小结 一、前言 众所周知,每家公司在发展过程中都需要构建大量的内部系统, 如运营使用的用户…

数据结构与算法基础-学习-14-线性表之串

一、串的定义由0-n个字符组成的有限序列。(n>0)二、串的相关术语1、子串串中任意个连续字符组成的子序列成为该串的子串。2、主串包含子串的串成为主串。3、字符位置字符在序列中的序号为该字符在串中的位置。4、子串位置子串第一个字符在主串中的位置…

Docker----------Docker轻量级可视化工具Portainer/监控之 CAdvisor+InfluxDB+Granfana

1.是什么 Portainer 是一款轻量级的应用,它提供了图形化界面,用于方便地管理Docker环境,包括单机环境和集群环境。 2 官网 官网 https://www.portainer.io/ https://docs.portainer.io/v/ce-2.9/start/install/server/docker/linux 3.…

【数电基础】——时序逻辑电路

目录 1.大纲 2.时序逻辑电路的特点 3.时序逻辑电路的一般形式 4.时序逻辑电路的描述方法 5.同步时序逻辑电路 6.异步时序逻辑电路 7.同步时序逻辑电路的分析方法(上升沿触发的D触发器) 8.同步时序逻辑电路的分析方法(脉冲触发的JK触发…

Grafana邮件及告警配置

之前部署过服务器的监控组件程序,本在部署时也进行邮件及告警配置,但未进行文档整理,在这儿进行展示。之前用过Grafana的7.*的版本,在进行邮件配置还比较OK,但在配置告警时,太繁琐,还要自己去写…

Java数据结构LinkedList单链表和双链表模拟实现及相关OJ题秒AC总结知识点

本篇文章主要讲述LinkedList链表中从初识到深入相关总结,常见OJ题秒AC,望各位大佬喜欢 一、单链表 1.1链表的概念及结构 1.2无头单向非循环链表模拟实现 1.3测试模拟代码 1.4链表相关面试OJ题 1.4.1 删除链表中等于给定值 val 的所有节点 1.4.2 反转…

【H2实践】之认识 H2

一、H2 官网 H2 官网 http://www.h2database.com/html/main.html H2 是一款短小精干的 Java 内存数据库,性能强劲。 H2 的优点: 非常快的数据库引擎开源Java 编写支持标准 SQL, JDBC API内嵌和服务器模式,支持集群强大的安全特性可使用 PostgreSQL OD…

如何实现云原生?推荐的几个实用工具

云原生是一种软件开发和部署的方法,它依赖于容器、微服务和自动化运维。它能使应用更高效、可靠和可扩展,并适用于不同的云平台。 如果要更直接、更通俗地解释上述概念的话。 云的本源更准确地说是一种文化,一种潮流,它必然是云…

更新 Python 100道基础入门检测练习题【下篇】(附答案)

前言 大家早好、午好、晚好吖 ❤ ~ 爆肝更新 Python 100道基础入门练习题【篇上】 更多精彩内容、资源皆可点击文章下方名片获取此处跳转 实例021:猴子偷桃 题目: 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半&#xf…

微服务一 实用篇 - 1. SpringCloud01

《微服务一 实用篇 - 1. SpringCloud01》 提示: 本材料只做个人学习参考,不作为系统的学习流程,请注意识别!!! 《微服务一 实用篇 - 1. SpringCloud01》《微服务一 实用篇 - 1. SpringCloud01》0. 微服务课程简介1.认识微服务1.0.学习目标1.1.单体架构1.2.分布式架构1.3.微服务…

1000亿数据、30W级qps如何架构?来一个天花板案例

1000亿级存储、30W级qps系统如何架构?来一个天花板案例 说在前面 在尼恩的(50)读者社群中,经常遇到一个 非常、非常高频的一个架构面试题,类似如下: 千万级数据,如何做系统架构?亿…

外网跨网远程控制内网计算机3种方案

远程控制,通俗来讲就是在自己个人电脑直接远程访问另台主机电脑桌面操作。 如何远程控制电脑?远程控制别人计算机的方案通常有两种,一种是开启电脑系统自带的远程桌面功能,如果涉及跨网内、外网互通可以同时用快解析内网映射外网&…

windows 下 安裝mysql 5.7.41 (64位) 超简单方式

文章目录1. 安装包下载2.安装步骤3. 服务卸载方式4. 配上 my.ini 常用配置1. 安装包下载 注意,截至2023年2月23日,MySQL所有版本不提供ARM芯片架构的Windows版本(8.0.12开始支持Red Hat系统的ARM版本),所以ARM架构的Windows无法安装MySQL&am…

如何批量重命名,把文件(夹)名的内容位置调整(前后移动)

首先,需要用到的这个工具: 百度 密码:qwu2 蓝奏云 密码:2r1z 情况是这样,把“中文[数字]”的名称,改为"中文 - 数字" 打开工具,切换到 文件批量复制 模块,快捷键Ctrl5 …

【同步工具类:CountDownLatch】

同步工具类:CountDownLatch介绍源码分析继承图核心方法分析await()countDown()业务场景代码实现测试结果总结介绍 Jdk原文翻译 CountDownLatch 一种同步辅助工具,允许一个或多个线程等待,直到在其他线程中执行的一组操作完成。 CountDownLatch用给定的计…