探索Puppeteer的强大功能:抓取隐藏内容

亿牛云爬虫代理.png

背景/引言

在现代网页设计中,动态内容和隐藏元素的使用越来越普遍,这些内容往往只有在特定的用户交互或条件下才会显示出来。为了有效地获取这些隐藏内容,传统的静态爬虫技术往往力不从心。Puppeteer,作为一个强大的无头浏览器工具,提供了丰富的功能来模拟用户行为,从而轻松抓取这些动态内容。本文将介绍如何使用Puppeteer抓取网页中的隐藏内容,并结合爬虫代理IP、useragent、cookie等设置,确保爬取过程的稳定性和高效性。

正文

Puppeteer介绍

Puppeteer是一个由Google维护的Node库,它提供了一个高层次的API来控制Chrome或Chromium浏览器。通过Puppeteer,我们可以自动执行诸如表单提交、UI测试、键盘输入等操作。它特别适用于处理JavaScript渲染的动态网页和隐藏元素。

抓取隐藏内容的几种方式

在实际应用中,隐藏内容可能是通过点击按钮、滚动页面等操作后才会显示。Puppeteer允许我们模拟这些用户操作,从而获取隐藏的内容。下面将介绍几种常见的抓取隐藏内容的方法。

1. 模拟点击操作

有些隐藏内容需要通过点击按钮或链接来显示。例如,一个“显示更多”按钮可能会加载更多的内容。

await page.click('#showHiddenContentButton');
await page.waitForSelector('#hiddenContent', { visible: true });
const hiddenContent = await page.evaluate(() => document.querySelector('#hiddenContent').innerText);
console.log('隐藏内容:', hiddenContent);
2. 滚动页面加载内容

某些页面通过滚动加载更多内容,比如无限滚动的社交媒体页面。在这种情况下,我们可以模拟滚动操作。

await page.evaluate(async () => {for (let i = 0; i < 10; i++) {window.scrollBy(0, window.innerHeight);await new Promise(resolve => setTimeout(resolve, 1000));}
});
const content = await page.content();
console.log('滚动加载的内容:', content);
3. 表单提交

有些隐藏内容需要通过表单提交来触发。例如,输入搜索关键词并点击搜索按钮。

await page.type('#searchInput', 'Puppeteer');
await page.click('#searchButton');
await page.waitForSelector('#searchResults', { visible: true });
const searchResults = await page.evaluate(() => document.querySelector('#searchResults').innerText);
console.log('搜索结果:', searchResults);
4. 等待特定时间

有些内容可能需要等待一段时间后才会加载,这时可以使用延时等待的方法。

await page.waitForTimeout(5000); // 等待5秒钟
const delayedContent = await page.evaluate(() => document.querySelector('#delayedContent').innerText);
console.log('延时加载的内容:', delayedContent);

使用爬虫代理IP、User-Agent和Cookie设置

在爬取过程中,使用爬虫代理IP、User-Agent和Cookie可以有效避免被网站封禁,提高爬取的稳定性和效率。

实例代码

以下是一个综合实例代码,展示如何使用Puppeteer抓取隐藏内容,并结合亿牛云爬虫代理、User-Agent和Cookie设置。

const puppeteer = require('puppeteer');(async () => {// 使用爬虫代理IP的配置 亿牛云爬虫代理标准版const proxy = {host: 'www.16yun.cn', // 代理服务器地址port: 12345, // 代理服务器端口username: 'your_username', // 代理服务器用户名password: 'your_password' // 代理服务器密码};// 启动浏览器,并配置代理和useragentconst browser = await puppeteer.launch({args: [`--proxy-server=${proxy.host}:${proxy.port}`]});const page = await browser.newPage();// 设置User-Agentawait page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36');// 设置Cookieawait page.setCookie({name: 'example_cookie',value: 'example_value',domain: 'example.com'});// 代理服务器身份验证await page.authenticate({username: proxy.username,password: proxy.password});// 打开目标网页await page.goto('https://example.com');// 模拟点击操作以显示隐藏元素await page.click('#showHiddenContentButton');// 等待隐藏元素加载并显示await page.waitForSelector('#hiddenContent', { visible: true });// 获取隐藏元素的内容const hiddenContent = await page.evaluate(() => document.querySelector('#hiddenContent').innerText);console.log('隐藏内容:', hiddenContent);// 模拟滚动操作以加载更多内容await page.evaluate(async () => {for (let i = 0; i < 10; i++) {window.scrollBy(0, window.innerHeight);await new Promise(resolve => setTimeout(resolve, 1000));}});// 获取滚动加载的内容const content = await page.content();console.log('滚动加载的内容:', content);// 模拟表单提交以获取隐藏内容await page.type('#searchInput', 'Puppeteer');await page.click('#searchButton');await page.waitForSelector('#searchResults', { visible: true });const searchResults = await page.evaluate(() => document.querySelector('#searchResults').innerText);console.log('搜索结果:', searchResults);// 等待特定时间后获取内容await page.waitForTimeout(5000); // 等待5秒钟const delayedContent = await page.evaluate(() => document.querySelector('#delayedContent').innerText);console.log('延时加载的内容:', delayedContent);await browser.close();
})();

代码解析

  1. 爬虫代理IP配置:通过puppeteer.launch方法中的args参数配置代理服务器地址和端口。使用page.authenticate方法进行代理服务器的身份验证。
  2. User-Agent设置:通过page.setUserAgent方法设置自定义的User-Agent字符串,模拟真实浏览器访问。
  3. Cookie设置:通过page.setCookie方法设置自定义的Cookie,模拟已登录状态或其他特定用户状态。
  4. 模拟用户操作:通过page.click方法模拟用户点击操作,显示隐藏内容。通过page.waitForSelector方法等待隐藏元素加载并显示。
  5. 滚动操作:通过page.evaluate方法模拟滚动操作,加载更多内容。
  6. 表单提交:通过page.typepage.click方法模拟表单输入和提交,获取隐藏内容。
  7. 延时等待:通过page.waitForTimeout方法等待特定时间后获取延时加载的内容。

结论

Puppeteer作为一个功能强大的无头浏览器工具,为我们提供了模拟用户行为、抓取动态内容的能力。结合代理IP、User-Agent和Cookie设置,可以有效提升爬取的稳定性和效率。通过上述示例代码,我们可以轻松抓取网页中的隐藏内容,为数据采集和分析提供有力支持。

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

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

相关文章

印尼语翻译通:AI驱动的智能翻译与语言学习助手

在这个多元文化交织的世界中&#xff0c;语言是连接我们的桥梁。印尼语翻译通&#xff0c;一款专为打破语言障碍而生的智能翻译软件&#xff0c;让您与印尼语的世界轻松接轨。无论是商务出差、学术研究&#xff0c;还是探索印尼丰富的文化遗产&#xff0c;印尼语翻译通都是您的…

代码随想录算法训练营第三十六天|1049. 最后一块石头的重量 II 、 494. 目标和 、 474.一和零

1049. 最后一块石头的重量 II 分成两堆石头&#xff0c;一堆石头的总重量是dp[target]&#xff0c;另一堆就是sum - dp[target]。 在计算target的时候&#xff0c;target sum / 2 因为是向下取整&#xff0c;所以sum - dp[target] 一定是大于等于dp[target]的。 那么相撞之…

.NET C# 使用 iText 生成PDF

.NET C# 使用 iText 生成PDF 文章目录 .NET C# 使用 iText 生成PDF1 安装 iText 7 库&#xff1a;2 变量定义3 创建一个PDF4 段落5 旋转文本6 代码块7 外部链接8 内部链接9 表格10 注释11 线条12 二维码13 嵌入图像14 列表15 设置背景16 页眉17 页脚18 事件19 水印20 分栏21 源…

老古董Lisp(1):粗鲁先生Lisp再出发

粗鲁先生Lisp再出发 开始的原因 目标和梦想是最近考虑的一个问题。什么是目标&#xff1f;什么是梦想&#xff1f;梦想可以激励改变&#xff0c;目标才能实现改变。 开始这个部分的时候&#xff0c;我的梦想是什么&#xff1f;我的目标是什么&#xff1f;我想要什么&#xf…

libwebrtc.a+exosip连接fS 环境部署tips

//运行FS服务器 sudo ./freeswitch -nc -nonat //公网sudo ./freeswitch //运行客户端 sudo ./fs_cli //加载模块 load mod_av load mod_verto0.Invite交互过程 1.fs码率设置 2.用户密码改动 3.数字签名的摘要 4.FS收不到ACK 5.公网部署 6.查看frewswitch都占用哪些端口 7.日志…

Java(二十一)---栈的使用和模拟实现

文章目录 前言1.什么是栈(Stack)?2. 栈的模拟实现3.stack的使用![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/80c82d22f3ee49cfaa2915d1c961573e.png)4.关于栈的oj题4.1.有效的括号4.2.逆波兰表达式4.3.栈的压入、弹出序列4.4.最小栈 前言 前面几篇我们学习了顺序…

Vue--Router(路由)

目录 一 Router(路由) 1.作用 2.实现步骤 3.注意 一 Router(路由) 1.作用 Router又叫做路由&#xff0c;简单来说&#xff0c;就是用来实现vue的页面之间跳转的。 我们都知道&#xff0c;使用vue必然会涉及到很多个组件&#xff0c;也就是页面&#xff0c;而页面之间肯定需…

RK3588读取不到显示器edid

问题描述 3588HDMIout接老的显示器或者HDMI转DVI接DVI显示器显示不了或者显示内容是彩色条纹,但是这种显示器测试过如果接笔记本或者主机是可以直接显示的。这一类问题是HDMI下的i2c与显示器通讯没成功,读取不到设备的edid。问题包括全志的H3 、AML的S905都有遇到 测试环境…

Qt-事件与信号

事件和信号的区别在于&#xff0c;事件通常是由窗口系统或应用程序产生的&#xff0c;信号则是Qt定义或用户自定义的。Qt为界面组件定义的信号往往通常是对事件的封装&#xff0c;如QPushButton的clicked()信号可以看做对QEvent::MouseButtonRelease类事件的封装。 在使用界面组…

【QGroundControl二次开发】二.使用QT编译QGC(Windows)

【QGroundControl二次开发】一.开发环境准备&#xff08;Windows&#xff09; 二. 使用QT编译QGC&#xff08;Windows&#xff09; 2.1 打开QT Creator&#xff0c;选择打开项目&#xff0c;打开之前下载的QGC项目源码。 编译器选择Desktop Qt 6.6.3 MSVC2019 64bit。 点击运…

vue3-tree-org实现带照片的组织架构图

官方文档&#xff1a;vue3-tree-org 显示照片需要注意的地方 使用步骤 下载 npm install vue3-tree-org --save 在main.js中引入 import "vue3-tree-org/lib/vue3-tree-org.css"; import vue3TreeOrg from vue3-tree-org;app.use(vue3TreeOrg) 实现代码 <tem…

level 6 day2 网络基础2

1.socket&#xff08;三种套接字&#xff1a;认真看&#xff09; 套接字就是在这个应用空间和内核空间的一个接口&#xff0c;如下图 原始套接字可以从应用层直接访问到网络层&#xff0c;跳过了传输层&#xff0c;比如在ubtan里面直接ping 一个ip地址,他没有经过TCP或者UDP的数…

解决TypeError: __init__() takes 1 positional argument but 2 were given

问题描述&#xff1a; 如下图&#xff0c;在使用torch.nn.Sigmoid非线性激活时报错 源代码&#xff1a; class testrelu(nn.Module):def __init__(self):super().__init__()self.sigmoid Sigmoid()def forward(self, input):output self.sigmoid(input)return outputwriter…

记录贴-芋道源码

环境搭建 文字讲解 链接: 芋道源码-环境搭建&#xff08;一&#xff09;后端 链接: 芋道源码-环境搭建&#xff08;二&#xff09;前端 链接: 基于FastGPT和芋道源码挑战一句话生成代码 视频讲解 链接: 芋道源码零基础启动教程&#xff08;上&#xff09; 链接: 芋道源码零基…

Blackbox AI:你的智能编程伙伴

目录 Blackbox AI 产品介绍 Blackbox AI 产品使用教程 Blackbox AI体验 AI问答 代码验证 实时搜索 探索&代理 拓展集成 总结 Blackbox AI 产品介绍 Blackbox是专门为程序员量身定制的语言大模型&#xff0c;它针对20多种编程语言进行了特别训练和深度优化&#xff0c;在AI代…

React 从入门到实战 一一开发环境基础搭建(小白篇)

React 从入门到实战一一开发环境基础搭建&#xff08;小白篇&#xff09; React 介绍什么是 react &#xff1f;react 主要功能react 框架特点 开发工具渲染测试 React 介绍 最近两年&#xff0c;react 也愈来愈火热&#xff0c;想要在里面分一杯羹&#xff0c;那肯定逃不过 r…

UFS协议

1. 名词解释 UFS: universal flash storage SCSI&#xff1a;小型计算机系统接口 SPC&#xff1a;SCSI Primary Commands SBC&#xff1a; SCSI Block Commands Application Client&#xff1a;作为主机中SCSI命令和任务管理功能请求源的实体。 Device Server&#xff1a;设备…

高级java每日一道面试题-2024年7月17日(java内存模型-后期完善)

面试官: 你对java内存模型了解多少? 我回答: Java内存模型&#xff08;JMM&#xff0c;Java Memory Model&#xff09;是Java虚拟机&#xff08;JVM&#xff09;规范的一部分&#xff0c;它定义了线程之间的内存可见性和并发执行时的原子性、有序性和可见性等特性。理解JMM对…

Windows下使用Cygwin创建rsync服务端

1 下载Cygwin 访问官网Cygwin&#xff0c;点击setup-X86_64.exe即可开始下载 2 安装 前面全部默认。路径可以自己选择&#xff0c;站点选阿里云的&#xff0c;等待安装即可 3 配置 使用打开Cygwin安装后创建的快捷方式窗口&#xff0c;输入下面的指令将windows用户导入到cyg…

C语言中常见库函数(1)——字符函数和字符串函数

文章目录 前言1.字符分类函数2.字符转换函数3.strlen的使用和模拟实现4.strcpy的使用和模拟实现5.strcat的使用和模拟实现6.strncmp的使用和模拟实现7.strncpy函数的使用8.strncat函数的使用9.strncmp函数的使用10.strstr的使用和模拟实现11.strtok函数的使用12.strerror函数的…