深入探讨 Puppeteer 如何使用 X 和 Y 坐标实现鼠标移动

爬虫代理

背景介绍

现代爬虫技术中,模拟人类行为已成为绕过反爬虫系统的关键策略之一。无论是模拟用户点击、滚动,还是鼠标的轨迹移动,都可以为爬虫脚本带来更高的“伪装性”。在众多的自动化工具中,Puppeteer作为一个无头浏览器控制库,以其强大的功能和灵活的 API 赢得了开发者的青睐。

本文将深入探讨 Puppeteer 如何通过X 和 Y 坐标精准实现鼠标移动,并结合实际案例展示如何采集小红书网站的内容。在此过程中,我们还将运用代理 IP 技术、设置 cookie 和 user-agent,模拟一个更加“真实”的用户环境。


问题陈述

在爬取小红书等具备强大反爬能力的网站时,仅简单发送 HTTP 请求已不足以满足需求。网站可能会通过以下方式检测爬虫:

  • 缺乏真实用户行为(鼠标移动、点击、键盘输入等)。
  • 请求 IP 地址异常频繁,导致触发封禁机制。
  • 浏览器指纹(如 User-Agent 或 Cookie)不符合常规。

这就要求我们在代码中实现:

  1. 模拟人类鼠标移动:基于 X 和 Y 坐标的动态轨迹。
  2. 代理 IP 技术:隐藏爬虫的真实 IP。
  3. 自定义请求头:包括 User-Agent 和 Cookie。
  4. 完整采集流程:以小红书为例,成功抓取页面内容。

解决方案

Puppeteer 的鼠标移动 API

Puppeteer 提供了 page.mouse.move(x, y, options) 方法来实现鼠标移动。结合一定的随机性,我们可以模拟真实用户的鼠标行为,避免直线轨迹暴露爬虫的本质。

实现代理 IP

使用代理 IP 技术能够有效地绕过 IP 限制。本文将参考爬虫代理的服务,通过配置代理服务器的地址、端口、用户名和密码,让 Puppeteer 的请求看起来更真实。


案例分析:采集小红书

以下是完整的代码实现,包含代理 IP、Cookie、User-Agent 的设置,以及鼠标移动的模拟。

const puppeteer = require('puppeteer');// 配置代理IP信息 亿牛云爬虫代理 www.16yun.cn
const proxy = {host: '代理服务器域名', // 替换为16yun爬虫代理提供的域名port: '代理服务器端口', // 替换为16yun爬虫代理提供的端口username: '用户名',      // 替换为16yun爬虫代理提供的用户名password: '密码',        // 替换为16yun爬虫代理提供的密码
};// 自定义 Cookie 和 User-Agent
const cookies = [{name: 'test_cookie',value: 'test_value',domain: 'xiaohongshu.com',path: '/',},
];
const userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36';(async () => {// 启动 Puppeteer,并设置代理const browser = await puppeteer.launch({headless: false, // 可设置为 true 来启用无头模式args: [`--proxy-server=http://${proxy.host}:${proxy.port}`, // 配置代理],});const page = await browser.newPage();// 设置认证代理await page.authenticate({username: proxy.username,password: proxy.password,});// 设置 User-Agentawait page.setUserAgent(userAgent);// 设置 Cookieawait page.setCookie(...cookies);// 打开小红书主页await page.goto('https://www.xiaohongshu.com', {waitUntil: 'networkidle2',});// 模拟鼠标移动console.log('模拟鼠标移动...');await page.mouse.move(100, 100); // 从点 (100, 100) 开始await page.waitForTimeout(500); // 等待 500 毫秒await page.mouse.move(200, 200, { steps: 20 }); // 平滑移动到点 (200, 200)// 获取页面内容const content = await page.evaluate(() => document.body.innerText);console.log('页面内容:', content);// 关闭浏览器await browser.close();
})();

代码解析

  1. 代理 IP 配置:通过 Puppeteer 的 --proxy-server 参数以及 page.authenticate 方法,完成代理 IP 的配置。
  2. Cookie 和 User-Agent:模拟浏览器的指纹数据,避免爬虫身份暴露。
  3. 鼠标移动模拟:采用 mouse.move 方法,通过动态坐标和步数实现平滑移动,模仿人类操作。
  4. 页面内容抓取:成功获取小红书页面的文本内容。

结论

通过结合 Puppeteer 的强大功能,我们不仅实现了对 X 和 Y 坐标的鼠标轨迹模拟,还在代码中整合了代理 IP 技术、Cookie 和 User-Agent 的设置。这些手段有效提升了爬虫的伪装性,使其能够成功应对小红书等具有强大反爬机制的网站。

下一步是什么? 你可以尝试进一步优化鼠标轨迹,使其更加随机,或结合键盘输入模拟,实现更加全面的行为伪装。技术无止境,挑战才刚刚开始!

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

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

相关文章

【学术论文投稿】JavaScript 前端开发:从入门到精通的奇幻之旅

【中文核刊&普刊投稿通道】2024年体育科技与运动表现分析国际学术会议(ICSTPA 2024)_艾思科蓝_学术一站式服务平台 更多学术会议论文投稿请看:https://ais.cn/u/nuyAF3 目录 一、引言 二、JavaScript 基础 (一)变量与数据类型 &am…

java实现枚举

介绍 枚举算法也叫暴力算法,是一种简单直接的问题求解方法,它通过逐一列举问题的所有可能解,并检查每个可能解是否符合问题的条件,直到找到正确的解或者遍历完所有可能的情况。 对于一个问题,首先确定解的范围&#x…

Leetcode 最长回文子串

目录 解法1:递归算法 解法2:Map取同字母位置法 解法3:中心扩展法 解法4:动态规划法 解法5: Manacher算法 示例 1: 输入:s "babad" 输出:"bab" 解释:&quo…

B树的简单实现

template<class K, size_t M> struct BTreeNode {K _keys[M]; // 用于存储关键字的数组&#xff0c;最多容纳 M 个关键字&#xff08;超额一个&#xff0c;为分裂提供空间&#xff09;。BTreeNode<K, M>* _subs[M 1]; // 存储子节点的指针数组&#xff0c;最多 M1…

2020 年 9 月青少年软编等考 C 语言三级真题解析

目录 T1. 因子问题思路分析T2. 质数的和与积思路分析T3. 括号匹配问题思路分析T4. 吃糖果 2思路分析T5. 铺砖思路分析T1. 因子问题 任给两个正整数 n n n、 m m m,求一个最小的正整数 a a a,使得 a a a 和 ( m − a ) (m-a) (m−a) 都是 n n n 的因子。 时间限制:1 s…

SpringBoot(8)-任务

目录 一、异步任务 二、定时任务 三、邮件任务 一、异步任务 使用场景&#xff1a;后端发送邮件需要时间&#xff0c;前端若响应不动会导致体验感不佳&#xff0c;一般会采用多线程的方式去处理这些任务&#xff0c;但每次都需要自己去手动编写多线程来实现 1、编写servic…

React的诞生与发展

React诞生于2013年&#xff0c;由Facebook&#xff08;现Meta&#xff09;的工程师Jordan Walke开发。那时的前端开发还处在jQuery的天下&#xff0c;组件化的概念尚未形成。React的出现犹如一阵春风&#xff0c;为前端开发带来了全新的开发理念和方法论。 React最核心的设计理…

WebStorm 2022.3.2/IntelliJ IDEA 2024.3出现elementUI提示未知 HTML 标记、组件引用爆红等问题处理

WebStorm 2022.3.2/IntelliJ IDEA 2024.3出现elementUI提示未知 HTML 标记、组件引用爆红等问题处理 1. 标题识别elementUI组件爆红 这个原因是&#xff1a; 在官网说明里&#xff0c;才版本2024.1开始&#xff0c;默认启用的 Vue Language Server&#xff0c;但是在 Vue 2 项…

Odoo :免费且开源的农牧行业ERP管理系统

文 / 开源智造Odoo亚太金牌服务 引言 提供农牧企业数字化、智能化、无人化产品服务及全产业链高度协同的一体化解决方案&#xff0c;提升企业智慧种养、成本领先、产业互联的核心竞争力。 行业典型痛点 一、成本管理粗放&#xff0c;效率低、管控弱 产品研发过程缺少体系化…

解决Excel文件流读取数字为时间乱码问题

在将Excel文件流转换为Java中的List时&#xff0c;如果遇到文本被错误地识别为日期格式的问题&#xff0c;这通常是由于Apache POI库在处理单元格数据时默认的行为所导致的。Apache POI会尝试根据单元格的内容自动确定其类型&#xff0c;包括字符串、数字&#xff08;可能解释为…

【Unity踩坑】出现d3d11问题导致编辑器崩溃

升级到Unity 6&#xff0c;有时出现下面这种D3D11的问题&#xff0c;会导致编辑器崩溃。 有人总结了这个问题的解决方法&#xff0c;可以做为参考&#xff1a; Failed to present D3D11 swapchain due to device reset/removed. List of Solutions - Unity Engine - Unity Dis…

数据库基础(MySQL)

1. 数据库基础 1.1 什么是数据库 存储数据用文件就可以了&#xff0c;为什么还要弄个数据库? 文件保存数据有以下几个缺点&#xff1a; 文件的安全性问题文件不利于数据查询和管理文件不利于存储海量数据文件在程序中控制不方便 数据库存储介质&#xff1a; 磁盘内存 为…

JMeter监听器与压测监控之Grafana

Grafana 是一个开源的度量分析和可视化套件&#xff0c;通常用于监控和观察系统和应用的性能。本文将指导你如何在 Kali Linux 上使用 Docker 来部署 Grafana 性能监控平台。 前提条件 Kali Linux&#xff1a;确保你已经安装了 Kali Linux。Docker&#xff1a;确保你的系统已…

集群聊天服务器(13)redis环境安装和发布订阅命令

目录 环境安装订阅redis发布-订阅的客户端编程环境配置客户端编程 功能测试 环境安装 sudo apt-get install redis-server 先启动redis服务 /etc/init.d/redis-server start默认在6379端口上 redis是存键值对的&#xff0c;还可以存链表、数组等等复杂数据结构 而且数据是在…

linux常用指令总结(附Vim编辑器学习总结)

本文是博主对Linux中经常用到的一些指令进行的总结&#xff0c;文章也附带了Linux中经常用到的Vim编辑器的一些基本知识和使用指令&#xff0c;觉得有帮助的朋友可以点赞收藏&#xff01; 本文会持续进行更新 linux常用指令总结 $ pwd # 查看当前终端所在…

w046基于web的古典舞在线交流平台的设计与实现

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…

阿里云轻量应用服务器可以用在哪些场景呢

在数字化转型的浪潮中&#xff0c;中小企业面临着如何快速、高效地上云的挑战。阿里云轻量应用服务器&#xff08;SWAS&#xff09;作为一款专为中小企业设计的云服务产品&#xff0c;提供了简单易用、经济实惠的解决方案&#xff0c;助力企业轻松实现云端部署&#xff0c;赋能…

植物明星大乱斗15

能帮到你的话&#xff0c;就给个赞吧 &#x1f618; 文章目录 player.hplayer.cppparticle.hparticle.cpp player.h #pragma once #include <graphics.h> #include "vector2.h" #include "animation.h" #include "playerID.h" #include &…

爬虫开发工具与环境搭建——使用Postman和浏览器开发者工具

第三节&#xff1a;使用Postman和浏览器开发者工具 在网络爬虫开发过程中&#xff0c;我们经常需要对HTTP请求进行测试、分析和调试。Postman和浏览器开发者工具&#xff08;特别是Network面板和Console面板&#xff09;是两种最常用的工具&#xff0c;能够帮助开发者有效地捕…

【操作系统】每日 3 题(二十九)

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?typeblog &#x1f4e3;专栏地址&#xff1a;https://blog.csdn.net/newin2020/category_12820365.html &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享操作系统面试中常见的面试题给大家~ ❤️…