JavaScript 渲染內容爬取:Puppeteer 入門

在現代網絡應用中,許多網頁內容是通過 JavaScript 渲染生成的,傳統的爬蟲工具往往難以獲取這些動態內容。Puppeteer 作為一種強大的瀏覽器自動化工具,為這一問題提供了優雅的解決方案。本文將帶你入門 Puppeteer,介紹如何安裝、啟動瀏覽器、創建新頁面、導航到指定頁面以及模擬用戶操作,為爬取動態網頁內容做好準備。

一、Puppeteer 簡介

Puppeteer 是一個由 Node.js 提供的庫,它提供了一套高級 API 來通過 DevTools 協議控制 Chrome 或 Chromium。換句話說,Puppeteer 允許開發者在無頭(headless)模式下自動化控制瀏覽器,進行網頁爬取、自動化測試、頁面截圖等操作。無頭模式指的是瀏覽器在后臺運行,不顯示圖形界面。

二、安裝 Puppeteer

在開始之前,需要確保你的項目中已經安裝了 Puppeteer。可以通過以下命令進行安裝:

mkdir puppeteer-demo
cd ./puppeteer-demo
npm init -y
npm install puppeteer

三、啟動瀏覽器

啟動瀏覽器是使用 Puppeteer 的第一步。以下是一個簡單的示例:

const puppeteer = require('puppeteer');async function startBrowser() {// 啟動瀏覽器const browser = await puppeteer.launch({headless: true, // 設置為 false 可以看到瀏覽器界面args: ['--no-sandbox', '--disable-setuid-sandbox']});console.log('瀏覽器已啟動');// 關閉瀏覽器await browser.close();console.log('瀏覽器已關閉');
}startBrowser();

四、創建新頁面

在啟動瀏覽器后,通常需要創建一個新頁面來進行操作:

async function createPage() {const browser = await puppeteer.launch({ headless: true });const page = await browser.newPage(); // 創建新頁面console.log('新頁面已創建');await browser.close();
}createPage();

五、導航到頁面

使用 goto 方法可以導航到指定的 URL:

async function navigateToPage() {const browser = await puppeteer.launch({ headless: true });const page = await browser.newPage();await page.goto('https://example.com', {waitUntil: 'networkidle2' // 等待網絡空閑});console.log('頁面加載完成');await browser.close();
}navigateToPage();

六、模擬用戶操作

Puppeteer 提供了豐富的 API 來模擬用戶的交互行為,例如點擊、輸入文本等。

點擊元素

點擊頁面上的按鈕或鏈接:

async function clickElement() {const browser = await puppeteer.launch({ headless: true });const page = await browser.newPage();await page.goto('https://example.com');await page.click('selector-of-button'); // 替換為實際的 CSS 選擇器console.log('元素點擊完成');await browser.close();
}clickElement();

輸入文本

在輸入框中輸入文本:

async function inputText() {const browser = await puppeteer.launch({ headless: true });const page = await browser.newPage();await page.goto('https://example.com');await page.type('selector-of-input', '輸入的文本內容'); // 替換為實際的 CSS 選擇器console.log('文本輸入完成');await browser.close();
}inputText();

七、完整示例:模擬登錄

以下是一個完整的示例,演示如何使用 Puppeteer 模擬登錄操作:

async function simulateLogin() {const browser = await puppeteer.launch({ headless: false }); // 設置為 false 可以看到瀏覽器界面const page = await browser.newPage();await page.goto('https://example.com/login');await page.type('selector-of-username', 'your-username'); // 替換為實際的 CSS 選擇器和用戶名await page.type('selector-of-password', 'your-password'); // 替換為實際的 CSS 選擇器和密碼await page.click('selector-of-login-button'); // 替換為實際的 CSS 選擇器// 等待登錄完成await page.waitForNavigation({ waitUntil: 'networkidle2' });console.log('登錄成功');// 進一步操作...// 保持瀏覽器打開,可手動關閉// await browser.close();
}simulateLogin();

八、總結

Puppeteer 是一個功能強大的瀏覽器自動化工具,特別適用于處理現代動態網頁的爬取任務。通過合理運用 Puppeteer,開發者可以輕松模擬用戶操作、導航到指定頁面、獲取動態內容,為爬蟲開發提供了極大的便利。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/78084.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/78084.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/78084.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

卷積神經網絡:視覺煉金術士的數學魔法

引言:當數學遇見視覺煉金術 在人工智能的奇幻世界里,卷積神經網絡(CNN)猶如掌握視覺奧秘的煉金術士,將原始像素的"鉛塊"淬煉成認知的"黃金"。這種融合數學嚴謹性與生物靈感的算法架構&#xff0c…

Android Cordova 開發 - Cordova 快速入門(Cordova 環境配置、Cordova 第一個應用程序)

一、Cordova 1、Cordova 概述 Cordova 是使用 HTML,CSS 和 JavaScript 構建混合移動應用程序的平臺 2、Cordova 特征 (1)命令行界面(Cordova CLI) 這是可用于啟動項目,構建不同平臺的進程,…

ubuntu18.04啟動不了修復

參考: 虛擬機里的Ubuntu18.4啟動時進入到grub rescue救援模式(無法正常進入到系統),ls查看后只有一個硬盤和分區,且無法找到/boot/grub文件【已解決】_ubuntu grub rescue-CSDN博客 本人fdisk錯誤使用,導致了grub啟動不了 第一步…

SpringBoot3設置maven package直接打包成二進制可執行文件

注意事項 SpringBoot普通native打包順序clean compile spring-boot:process-aot native:compile 使用以下配置只會的打包順序clean package(注意:使用此配置以后打包會有編譯后的class文件、jar包、original源文件、二進制可執行文件【Linux是無后綴的包…

【華為】防火墻雙擊熱備-之-主備模式-單外網線路

FW1和FW2的業務接口都工作在三層,上行連接二層交換機。上行交換機連接運營商的接入點,運營商為企業分配的IP地址為100.100.100.2。現在希望FW1和FW2以主備備份方式工作。正常情況下,流量通過FW1轉發;當FW1出現故障時,流…

MYSQL之表的操作

1. 創建表 語法: CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype ) character set 字符集 collate 校驗規則 engine 存儲引擎; field 表示列名, datatype 表示列的類型character set 字符集, 如果沒有指定字符集, 則以所在數據庫的字符集為…

RAG進階:Chroma開源的AI原生向量數據庫

一、Chroma 核心概念與優勢 1. 什么是 Chroma? Chroma 是一款開源的向量數據庫,專為高效存儲和檢索高維向量數據設計。其核心能力在于語義相似性搜索,支持文本、圖像等嵌入向量的快速匹配,廣泛應用于大模型上下文增強&#xff0…

店匠科技摘得 36 氪“2025 AI Partner 創新大獎”

全場景 AI 方案驅動跨境電商數智化躍遷 4 月 18 日,36 氪 2025 AI Partner 大會于上海盛大開幕。大會緊扣“Super App 來了”主題,全力探尋 AI 時代的全新變量,探索 AI 領域下一個超級應用的無限可能性。在此次大會上,跨境電商獨立站 SaaS 平臺店匠科技(Shoplazza)憑借“店匠跨…

SQL技術終極指南:從內核原理到超大規模應用

一、DDL核心應用場景與最佳實踐 1.1 表結構設計場景矩陣 業務場景核心語法要素典型實現案例電商用戶畫像JSON字段虛擬列索引CREATE TABLE users (id INT, profile JSON, AS (profile->>$.age) VIRTUAL, INDEX idx_age((profile->>$.age)))物聯網時序數據分區表壓…

吳恩達深度學習作業CNN之ResNet實現(Pytorch)

課程中認識許多CNN架構。首先是經典網絡: LeNet-5AlexNetVGG 之后是近年來的一些網絡: ResNetInceptionMobileNet 經典網絡 LeNet-5 LeNet-5是用于手寫數字識別(識別0~9的阿拉伯數字)的網絡。它的結構如下: 網絡…

FPGA入門學習Day1——設計一個DDS信號發生器

目錄 一、DDS簡介 (一)基本原理 (二)主要優勢 (三)與傳統技術的對比 二、FPGA存儲器 (一)ROM波形存儲器 (二)RAM隨機存取存儲器 (三&…

SqlSugar與Entity Framework (EF)的SWOT分析

以下是基于 SWOT 分析法 對 SqlSugar 和 Entity Framework (EF) 的特性對比: SqlSugar 優勢 (Strengths) 高性能: SqlSugar 以輕量化設計著稱,執行速度更快,適合對性能要求較高的場景。在大數據量操作和復雜查詢中表現優異。 易…

學習記錄:DAY16

Maven 進階與前端實戰 前言 二輪考核的內容下來了,由整體項目構建轉為實現特定模塊的功能。對細節的要求更高了,而且有手搓線程池、手搓依賴注入等進階要求,又有得學力。嘻嘻,太簡單了,只要我手搓 Spring Boot 框架……

深度學習--卷積神經網絡調整學習率

文章目錄 前言一、學習率1、什么學習率2、什么是調整學習率3、目的 二、調整方法1、有序調整1)有序調整StepLR(等間隔調整學習率)2)有序調整MultiStepLR(多間隔調整學習率)3)有序調整ExponentialLR (指數衰減調整學習率)4)有序調整…

【消息隊列RocketMQ】四、RocketMQ 存儲機制與性能優化

一、RocketMQ 存儲機制詳解 1.1 存儲文件結構? RocketMQ 的存儲文件主要分布在store目錄下,該目錄是在broker.conf配置文件中通過storePathRootDir參數指定的,默認路徑為${user.home}/store 。主要包含以下幾種關鍵文件類型:? 1.1.1 Comm…

C++入門小館: 探尋vector類

嘿,各位技術潮人!好久不見甚是想念。生活就像一場奇妙冒險,而編程就是那把超酷的萬能鑰匙。此刻,陽光灑在鍵盤上,靈感在指尖跳躍,讓我們拋開一切束縛,給平淡日子加點料,注入滿滿的pa…

CSS-跟隨圖片變化的背景色

CSS-跟隨圖片變化的背景色 獲取圖片的主要顏色并用于背景漸變需要安裝依賴 colorthief獲取圖片的主要顏色. 并丟給背景注意 getPalette并不是個異步方法 import styles from ./styles.less; import React, { useState } from react; import Colortheif from colorthief;cons…

RAGFlow:構建高效檢索增強生成流程的技術解析

引言 在當今信息爆炸的時代,如何從海量數據中快速準確地獲取所需信息并生成高質量內容已成為人工智能領域的重要挑戰。檢索增強生成(Retrieval-Augmented Generation, RAG)技術應運而生,它將信息檢索與大型語言模型(L…

SpringBoot應用:MyBatis的select語句如何返回數組類型

在SpringBoot應用中&#xff0c;比如想返回一個表的主鍵id構成的Long型數組Long[]&#xff0c;需要在XxxMapper.xml文件中這樣定義select語句&#xff1a; <select id"selectIds" parameterType"int" resultType"Long">select id from sy…

【HFP】藍牙HFP協議來電處理機制解析

目錄 一、協議概述與技術背景 1.1 HFP協議演進 1.2 核心角色定義 1.3 關鍵技術指標 二、來電接入的核心交互流程 2.1 基礎流程概述&#xff1a;AG 的 RING 通知機制 2.2 HF 的響應&#xff1a;本地提醒與信令交互 三、帶內鈴聲&#xff08;In-Band Ring Tone&#xff0…