解决PuppeteerSharp生成PDF颜色问题的最佳实践

news2024/9/28 1:56:55

亿牛云爬虫代理.png

在现代网络开发中,使用爬虫技术生成PDF文件已成为一种常见需求。然而,开发者经常会遇到一些棘手的问题,其中之一便是使用PuppeteerSharp生成PDF时颜色丢失的问题。本篇文章将概述如何解决这一问题,并提供最佳实践和相关代码示例。

概述

PuppeteerSharp是一个强大的.NET库,它允许开发者使用无头浏览器进行网页操作和生成PDF文件。然而,在某些情况下,生成的PDF文件可能会出现颜色丢失的问题。此问题通常是由于CSS设置不当或PuppeteerSharp的PDF生成选项配置不正确导致的。

细节

解决PuppeteerSharp生成PDF颜色问题的关键在于正确配置PdfOptions和CSS规则。此外,使用爬虫代理IP、设置user-agent和cookie等技术,可以提高爬虫效率和稳定性。以下是具体的步骤和代码示例。

1. 设置PuppeteerSharp的PdfOptions

在生成PDF时,需要确保设置了正确的PdfOptions参数。例如,PrintBackground属性应设置为true,以确保背景颜色能够正确显示。

2. 配置CSS规则

在CSS中,使用@media print规则确保在打印或生成PDF时颜色能正确显示。关键是设置-webkit-print-color-adjust: exact

3. 使用爬虫代理IP

为了提高爬虫效率和稳定性,可以使用爬虫代理IP技术。以下示例代码使用了亿牛云爬虫代理。

4. 设置User-Agent和Cookie

通过设置适当的User-Agent和Cookie,可以模拟真实用户的行为,避免被反爬虫机制检测到。

代码示例

以下是一个使用PuppeteerSharp生成PDF并解决颜色丢失问题的完整代码示例。该代码还包括使用爬虫代理IP、设置User-Agent和Cookie的部分。

using System;
using System.Threading.Tasks;
using PuppeteerSharp;

class Program
{
    static async Task Main(string[] args)
    {
        // 设置爬虫代理IP信息 亿牛云爬虫代理加强版
        string proxyServer = "http://www.16yun.cn:端口";
        string proxyUsername = "用户名";
        string proxyPassword = "密码";

        // 启动浏览器并配置爬虫代理IP
        var browserFetcher = new BrowserFetcher();
        await browserFetcher.DownloadAsync(BrowserFetcher.DefaultRevision);
        var launchOptions = new LaunchOptions
        {
            Headless = true,
            Args = new[]
            {
                $"--proxy-server={proxyServer}",
                "--no-sandbox",
                "--disable-setuid-sandbox"
            }
        };

        using var browser = await Puppeteer.LaunchAsync(launchOptions);
        using var page = await browser.NewPageAsync();

        // 设置代理身份验证
        await page.AuthenticateAsync(new Credentials
        {
            Username = proxyUsername,
            Password = proxyPassword
        });

        // 设置User-Agent和Cookie
        await page.SetUserAgentAsync("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36");
        await page.SetCookieAsync(new CookieParam
        {
            Name = "cookie_name",
            Value = "cookie_value",
            Domain = "zxcs.info"
        });

        // 导航到目标网页
        await page.GoToAsync("https://zxcs.info");

        // 注入CSS规则,确保颜色在PDF中正确显示
        await page.EvaluateFunctionOnNewDocumentAsync(@"
            () => {
                const style = document.createElement('style');
                style.type = 'text/css';
                style.innerHTML = `
                    @media print {
                        @page {
                            margin: 22mm 15mm 35mm 15mm;
                            background-color: teal !important;
                        }
                        html, body, #content, #header, #footer, .page {
                            background-color: teal !important;
                            -webkit-print-color-adjust: exact !important;
                        }
                    }
                `;
                document.head.appendChild(style);
            }
        ");

        // 生成PDF
        await page.PdfAsync("output.pdf", new PdfOptions
        {
            Format = PaperFormat.A4,
            PrintBackground = true,
            PreferCSSPageSize = true,
        });

        await browser.CloseAsync();
    }
}

结论

通过正确配置PuppeteerSharp的PdfOptions和CSS规则,可以有效解决生成PDF时颜色丢失的问题。此外,使用爬虫代理IP、设置User-Agent和Cookie等技术可以显著提高爬虫效率和稳定性。希望本文的最佳实践和代码示例对您在解决相关问题时有所帮助。

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

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

相关文章

TI音频功放TAS6511(二)

3.数字音频处理 芯片支持高级数字音频处理能力,包括: 高通滤波器/直流阻断 数字音量控制 PVDD的Foldback/AGL 热Foldback 双象限增益补偿 混合调制 实时负载诊断 低延迟路径 喇叭功率限制 1)PVDD Foldback 本功能主要为了防止音频…

学习笔记--算法(双指针)2

复写零 链接:https://leetcode.cn/problems/duplicate-zeros/ 题目 给你一个长度固定的整数数组 arr ,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。 注意:请不要在超过该数组长度的位置写入元素。请对输入的…

分享一个基于微信小程序的旅游自助拼团系统(源码、调试、LW、开题、PPT)

💕💕作者:计算机源码社 💕💕个人简介:本人 八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流&…

想业余时间做个网赚项目,有啥捷径?

前两年我陷入一段迷茫、浮躁、焦虑期。 主要原因是,心很大,力不足。 总想着找到一个高利润、高复购、少竞争的“蓝海”产品。 于是就面临一个尴尬的境地:普通业务看不上,蓝海业务找不着。 而且总想着做推广一步登天&#xff0…

程序员日志之DNF手游女鬼剑前瞻

目录 传送门正文日志1、概要女鬼剑 传送门 SpringMVC的源码解析(精品) Spring6的源码解析(精品) SpringBoot3框架(精品) MyBatis框架(精品) MyBatis-Plus SpringDataJPA SpringClou…

【教资 · 科目一】综合素质

【科目一】综合素质 单选题:29道/2分,共58分材料分析题:3道/14分,共42分写作题:1道,50分 卷面满分150分 —— 报告满分120分 及格分数99分以上 —— 及格分数70分 ‍ 考试内容: 职业理念&a…

Flink笔记整理(七)

Flink笔记整理(七) 文章目录 Flink笔记整理(七)九、容错机制9.1 检查点(Checkpoint)检查点的保存从检查点恢复状态检查点算法9.2 状态一致性9.3 端到端精确一次(End-To-End Exactly-Once&#x…

中科亿海微SoM模组——光纤陀螺控制板

光纤陀螺控制板 光纤陀螺仪是一种高精度、高可靠性的惯性测量仪器,被广泛应用于导航、姿态控制等应用场景,具有非常重要的应用价值。 本文介绍的光纤陀螺控制板是基于中科亿海微自研的SiP芯片平台,以及光纤陀螺数字信号处理流程&#xff0c…

安泰高压功率放大器的作用以及应用有哪些

高压功率放大器是一种用于增强信号强度的电子设备。它的作用是将输入信号的功率放大到足够的水平,以便在系统中进行传输或执行特定的任务。高压功率放大器在各种领域都有广泛的应用,从通信到科学研究再到医疗设备等多个领域都可以找到其身影。 高压功率放…

echarts横向柱状图

一、效果图 二、代码 let option {grid: {top: 8%,bottom: -20,right: 20,left: 20,containLabel: true},xAxis: {show: false},yAxis: [{triggerEvent: true,show: true,inverse: true,data: getArrByKey(data, name),axisLine: {show: false},splitLine: {show: false},axi…

React(五):XLS、XLSX文件在线预览

效果 依赖 $ yarn add xlsx源码 .xlsx-wrap {position: relative;width: 100%;height: 100%;background-color: #fafafa;.ant-tabs {width: 100%;height: 100%;.ant-tabs-nav {height: 50px;padding: 0 10px;margin-bottom: 0;}.ant-tabs-content-holder {border-top: 1px so…

JavaScript对象转数组的三种简单方法

大家好!今天我们要聊的是JavaScript中一个非常实用的技巧——将对象转换为数组。 方法1:使用Object.keys()和Array.map() 首先介绍一种基础但非常实用的方法,就是通过Object.keys()获取对象的键,然后用Array.map()把这些键对应的值…

C++ primer plus 第17 章 输入、输出和文件:文件输入和输出01

C primer plus 第17 章 输入、输出和文件:文件输入和输出01 C primer plus 第17 章 输入、输出和文件:文件输入和输出01 文章目录 C primer plus 第17 章 输入、输出和文件:文件输入和输出0117.4 文件输入和输出17.4.1 简单的文件 1/0程序清…

商家转账到零钱分销返佣申请方案及驳回处理办法

分销返佣场景是商家申请最多的场景,因而申请被驳回也是最多的,根据我们上万次成功开通商家转账到零钱的经验,当商家转账到零钱的分销返佣场景被驳回时,按照以下步骤,商家都可以快速过审: 一、分析驳回原因 …

C Primer Plus 第6章——第一篇

你该逆袭了 第6章:重点摘录 零、本章内容介绍一、while 循环1、程序注释(1)伪代码 2、C 风格读取循环 二、while 语句1、终止 while 循环2、语法要点 三、用 关系运算符 和 表达式 比较大小1、fabs( ) 函数 比较 浮点数(1) fabs( ) 函数 2、什么是 真&am…

世界人口过亿的一级行政区分布

世界国人口已经突破80亿,人口过亿的国家也有14个,分别是中国、俄罗斯、巴西、墨西哥,美国、日本、印度、巴基斯坦、印度尼西亚、尼日利亚、孟加拉国、埃塞俄比亚、菲律宾、埃及。 那么作为国家的一级行政区人口过亿的区域有那些呢?这里就来…

返璞归真:通过简化用例来简化用户界面01

Larry Constantine 著harvey 译 我们常被问及精简那些最简化、抽象和通用窗体用例的重要性。到底有多重要呢?在以用户为 中心的设计中,简化那些重要窗体的用例是获得成功的关键。它能够为开发者设计优秀的用户界面 助一臂之力。通过消除不必要的或技术驱…

书籍推荐-给数字化、PLM制造从业同行推荐的几本书

基础入门和提升的书籍: 1.《制造企业的产品数据管理--原理、概念、策略》,作者:[德]约瑟夫萧塔纳著,祁国宁译 这是一本很基础,但是也非常经典的企业实施PDM管理价值和方法的书籍,大概出版于2001年&#x…

@Component 注解高端玩法【策略模式】

优质博文:IT-BLOG-CN 在Spring框架中,Component注解本身并不支持直接通过注解参数来定义一个key值。不过,你可以通过自定义注解和Qualifier注解来实现类似的功能。 以下是一个示例,展示如何通过自定义注解和Qualifier来实现将不同…

芯片行业ERP相比于传统ERP到底有什么区别

在数字化发展时代,ERP系统已成为企业管理和运营的重要工具。然而,在高度正规化的芯片行业中,传统ERP系统往往难以满足其独特的业务需求。本文将带大家一起来探讨芯片行业ERP与传统ERP之间的主要区别。 1. 专业化与定制化需求 芯片行业ERP系统…