Puppeteer自动化:使用JavaScript定制PDF下载

news2024/12/23 20:18:03

爬虫代理

引言

在现代的Web开发中,自动化已经成为提高效率和减少重复劳动的重要手段。Puppeteer 是一个强大的Node.js库,提供了对无头Chrome或Chromium的控制,可以用于生成网页快照、抓取数据、自动化测试等任务。其中,生成PDF文件是一个常见的需求,本文将通过使用Puppeteer展示如何自动化生成定制的PDF,并使用代理IP、设置user-agent、cookie等技术来增强自动化过程的灵活性与稳定性。

正文

Puppeteer允许用户通过简洁的API操控浏览器行为,如页面导航、点击、表单填写和页面截图等。生成PDF的过程就是通过控制浏览器渲染页面,并将页面内容输出为PDF格式文件。为了应对网络请求的反爬虫策略,代理IP、user-agent和cookie等配置显得尤为重要,特别是需要从特定网站获取数据时。

Puppeteer生成PDF的基本步骤

  1. 安装Puppeteer
    首先,需要确保Node.js环境已安装。通过以下命令安装Puppeteer:
npm install puppeteer
  1. 配置代理IP
    在复杂的爬虫任务中,使用代理IP是避免IP被封的常用手段。本文将参考爬虫代理的配置来实现代理IP的设置。
  2. 设置user-agent和cookie
    设置合适的user-agent和cookie有助于模仿真实用户访问,避免触发反爬机制。

示例代码

const puppeteer = require('puppeteer');

// 亿牛云 爬虫代理配置
const proxyConfig = {
    domain: 'your_proxy_domain',  // 代理IP提供商的域名
    port: 'your_proxy_port',      // 代理端口
    username: 'your_username',    // 用户名
    password: 'your_password'     // 密码
};

// 自定义的User-Agent和Cookie
const userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36';
const cookie = [{
    'name': 'example_cookie',
    'value': 'cookie_value',
    'domain': '.example.com',
    'path': '/'
}];

(async () => {
    // 启动带有代理的浏览器实例
    const browser = await puppeteer.launch({
        headless: true, // 以无头模式运行
        args: [
            `--proxy-server=${proxyConfig.domain}:${proxyConfig.port}` // 设置代理IP
        ]
    });

    const page = await browser.newPage();

    // 设置代理认证
    await page.authenticate({
        username: proxyConfig.username,
        password: proxyConfig.password
    });

    // 设置User-Agent
    await page.setUserAgent(userAgent);

    // 设置Cookie
    await page.setCookie(...cookie);

    // 导航到目标网页
    await page.goto('https://www.example.com', { waitUntil: 'networkidle2' });

    // 生成PDF文件
    await page.pdf({
        path: 'output.pdf',       // 输出PDF文件的路径
        format: 'A4',             // 设置纸张格式
        printBackground: true,    // 是否打印背景
        displayHeaderFooter: false // 隐藏页眉和页脚
    });

    console.log('PDF生成成功!');

    // 关闭浏览器
    await browser.close();
})();

代码解读

  1. 代理配置
    使用args参数指定代理服务器,并通过page.authenticate()方法进行代理认证。
  2. 设置user-agent
    通过page.setUserAgent()来模仿真实用户浏览器的行为。
  3. 设置cookie
    通过page.setCookie()模拟登录状态或获取特定权限的数据。
  4. 生成PDF
    通过page.pdf()方法可以将当前页面渲染为PDF。该方法允许自定义输出的PDF文件路径、格式、是否显示背景图、以及是否包含页眉页脚等选项。

实例

为了更好地理解如何定制Puppeteer生成的PDF文件,我们提供一个生成A4纸张格式的网页PDF的实例。该PDF文件包含网页的所有内容,并且通过代理IP绕过网站的防爬机制。用户可以根据需求自定义输出的PDF格式或内容。

结论

Puppeteer的强大功能使其在网页自动化、数据抓取、生成PDF等任务中表现出色。通过结合代理IP、设置user-agent和cookie等技术,我们可以提升自动化任务的灵活性和稳定性。在实际项目中,这种自动化生成PDF的技术可以广泛应用于报表生成、发票打印等场景。

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

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

相关文章

【TOP K】leetcode 215.数组中第K个最大的元素

1 题目描述 题目链接:数组中第K个最大的元素 2 题目解析 首先区分 第K个最大的元素和 第K个不同的元素 考虑使用什么数据结构? 使用堆的数据结构,可以使用priority_queue,然后 建大堆,这样大的元素就在前面。接着…

爬虫案例——爬取腾讯社招

案例需求: 1.爬取腾讯社招的数据(搜索 | 腾讯招聘)包括岗位名称链接时间公司名称 2.爬取所有页(翻页) 3.利用jsonpath进行数据解析 4.保存数据:txt文本形式和excel文件两种形式 解析: 1.分…

9.16贪心算法

定义:贪心算法是一种逐步构建解决方案的算法,每次选择当前最优的局部解,期望通过局部最优解的累积,最终获得全局最优解​​​​​​典型例题: 1.找零问题--蓝桥云课 解决方案:先找大额,再找小额…

FreeRTOS学习笔记内置部分公司面试题目(更新中)

1. 简介 1.1 RTOS简介 RTOS(实时操作系统)是指一类系统,如 FreeRTOS,uC/OS,RTX,RT-Thread 等,都是 RTOS 类操作系统。 FreeRTOS 由美国的 Richard Barry 于 2003 年发布。 FreeRTOS 于 2017 年被亚马逊收购&#x…

【EXCEL数据处理】000022 案例 保姆级教程,附多个操作案例。EXCEL邮件合并工具

前言:哈喽,大家好,今天给大家分享一篇文章!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 【EXCEL数据处理】000022 案例 保姆级教程,附多个操作案例。…

如何基于 RLHF 来优化 ChatGPT 类型的大语言模型

🚴前言 对于ChatGPT来说,RLHF是其训练的核心。所谓RLHF,即Reinforcement Learning with Human Feedback,基于人类反馈的强化学习。这项技术通过结合模型自身的生成能力和人类专家的反馈,为改进文本生成质量提供了新的…

云计算Openstack Horizon

OpenStack是一个开源的云计算平台,提供了构建和管理云计算环境所需的软件工具。而Horizon则是OpenStack的一个关键组件,它是基于Web的用户界面,为用户提供了一种直观、便捷的方式来管理和使用OpenStack资源。 一、技术原理 Horizon是一个基…

CloudStack计算节点配置

主机信息 CloudStack计算节点 任务1、计算节点基础环境准备 1)需要创建2张网卡!!!】 2)VMware Workstation 中设置网卡模式为NAT,在“网络编辑器”中设置DHCP,网关设置为192.168.100.1,地址段为192.168.…

【记录】PPT|PPT 箭头相交怎么跨过

众所周知,在PPT中实现“跨线”效果并非直接可行,这一功能仅存在于Visio中。然而,通过一些巧妙的方法,我们可以在PPT中模拟出类似的效果。怎么在PPT中画交叉但不重叠的线-百度经验中介绍了一种方法,而本文将介绍一种改进…

初探OceanBase 4.x单机环境下如何进行主备架构搭建

本文来自OceanBase 用户的体验分享 (以下简称 OB),已经开源了3年左右,其间从3.x版本演进至4.x版本,发生了许多变化。对一个DBer而言,最为关切的是如何高效运用OB,以及是否能实现如同应用MySQL般…

计算机毕业设计 基于Hadoop的智慧校园数据共享平台的设计与实现 Python毕业设计 Python毕业设计选题 Spark 大数据【附源码+安装调试】

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

解析一体式IO与分布式IO:从架构到应用

在工业自动化领域,IO(输入/输出)系统扮演着举足轻重的角色。它们不仅负责数据的采集和控制指令的发送,还直接影响到系统的灵活性、可靠性和成本效益。明达技术将为您介绍一体式IO和分布式IO在架构及应用层的主要区别,帮…

Unity 从零开始的框架搭建1-1 unity中对象调用的三种方式的优缺点分析【干货】

该文章专栏是向QFrameWork作者凉鞋老师学习总结得来,吃水不忘打井人,不胜感激 Unity 框架搭建学习笔记1-1,前一个1代表凉鞋的第一季教程,后一个1代表该季第一篇我的文章 unity中对象调用的三种方式 方法调用,例如&…

计算机毕业设计 基于Python的智能停车系统的设计与实现 Python+Django+Vue 前后端分离 附源码 讲解 文档

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

对高危漏洞“Docker Engine API is accessible without authentication”的修复

一.背景 之前文章maven项目容器化运行之1-基于1Panel软件将docker镜像构建能力分享给局域网_1panel 构建镜像-CSDN博客将1Panel软件的Doocker端口给到了局域网,安全组兄弟扫描认为是高危漏洞,可能导致攻击者获取对Docker主机的完全控制权。 二.修复的建…

单兵可背负履带式全地形无人车技术详解

单兵可背负履带式全地形无人车是一种专为复杂环境和多样化任务设计的智能装备,具备出色的地面适应性、越野性能以及灵活的操控性。以下是对其技术的详细解析: 一、驱动技术 履带式驱动:采用履带式驱动技术,通过履带与地面的广泛…

动手学深度学习9.3. 深度循环神经网络-笔记练习(PyTorch)

本节课程地址:58 深层循环神经网络【动手学深度学习v2】_哔哩哔哩_bilibili 本节教材地址:9.3. 深度循环神经网络 — 动手学深度学习 2.0.0 documentation (d2l.ai) 本节开源代码:...>d2l-zh>pytorch>chapter_multilayer-perceptr…

计算机毕业设计 基于Flask+vue的博客系统的设计与实现 Python毕业设计 Python毕业设计选题 Flask框架 Vue【附源码+安装调试】

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

数据结构-4.5.KMP算法(旧版上)-朴素模式匹配算法的优化

朴素模式匹配算法最坏的情况: 一.实例: 第一轮匹配失败,开始下一轮的匹配: 不断的操作,最终匹配成功: 如上述图片所述,朴素模式匹配算法会导致时间开销增加, 优化思路:主…

Java:数据结构-List的介绍 ArrayList和顺序表(1)

一 List的介绍 1.什么是List? List是一个接口,继承于Collection。 Collection也是一个接口 Lterable也是一个接口,表示实现该接口的类是可以逐个元素遍历的类。 2.List的使用 List是一个接口,不能被实例化,ArrayL…