Chrome扩展开发实战:网页图片抓取,打造专属自己的效率插件

2023-09-06 21:05:11

在这里插入图片描述

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月csdn上海赛道top4。
🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。
🏆本文已收录于专栏:100个JavaScript的小应用
🎉欢迎 👍点赞✍评论⭐收藏


🚀一、背景

Chrome扩展程序是一种可以增强Chrome浏览器功能的插件,它可以通过添加新的界面元素、修改网页内容或与浏览器进行交互等方式来实现功能增强。本文将介绍如何开发一个简单的Chrome扩展程序,该程序能够在面板上显示一个按钮,点击按钮后可以跳转到百度。并且后面再给出一个进阶一点的教程,通过网页通信抓取显示页面所有图片。

在这里插入图片描述

🚀二、插件开发流程

  • 创建扩展程序文件夹
  • 添加清单文件manifest.json
  • 编写HTML文件
  • 编写JavaScript文件
  • 加载扩展程序

🔎2.1. 创建扩展程序文件夹

首先,在本地文件系统上创建一个用于存放扩展程序的文件夹。

🔎2.2 添加清单文件manifest.json

在扩展程序文件夹中创建一个名为manifest.json的文件。清单文件是Chrome扩展程序的核心配置文件,用于描述扩展程序的各个组件和属性。

以下是一个简单的manifest.json示例:

{
  "manifest_version": 2,
  "name": "My Extension",
  "version": "1.0",
  "description": "A simple Chrome extension",
  "icons": {
    "16": "icon.png",
    "48": "icon.png",
    "128": "icon.png"
  },
  "browser_action": {
    "default_popup": "popup.html",
    "default_icon": "icon.png"
  },
  "permissions": [
    "webNavigation",
    "tabs"
  ]
}

在这个示例中,我们指定了扩展程序的名称、版本、描述和图标等信息,并通过browser_action属性指定了扩展程序默认的弹出页面。

🔎2.3 编写HTML文件

在扩展程序文件夹中创建一个名为popup.html的HTML文件,用于定义面板上要显示的内容。

以下是一个简单的popup.html示例:

<!DOCTYPE html>
<html>
<head>
  <title>My Extension</title>
  <script src="popup.js"></script>
</head>
<body>
  <button id="baiduButton">跳转到百度</button>
</body>
</html>

在这个示例中,我们创建了一个按钮,按钮的id为baiduButton

🔎2.4 编写JavaScript文件

在扩展程序文件夹中创建一个名为popup.js的JavaScript文件,用于处理按钮的点击事件。

以下是一个简单的popup.js示例:

document.addEventListener('DOMContentLoaded', function() {
  var baiduButton = document.getElementById('baiduButton');
  baiduButton.addEventListener('click', function() {
    chrome.tabs.create({ url: 'https://www.baidu.com' });
  });
});

在这个示例中,我们使用chrome.tabs.create方法来创建一个新的标签页,并将其URL设置为百度的网址。

🔎2.5 加载扩展程序

最后,打开Chrome浏览器,在地址栏中输入chrome://extensions/,进入扩展程序管理页面。开启开发者模式后,点击“加载已解压的扩展程序”,选择我们创建的扩展程序文件夹。

至此,我们已经完成了Chrome扩展程序的开发。现在,当我们点击面板上的按钮时,就可以跳转到百度了。来看一下下图演示。

在这里插入图片描述

🚀三、网页图片抓取实战

🔎3.1 background.js

创建一个新的文件background.js,并添加以下代码以监听来自popup.js的消息和执行图片收集逻辑

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
  if (request.action === 'collectImages') {
    chrome.tabs.executeScript({
      file: 'content/content-script.js'
    });
  }
});

🔎3.2 content-script.js

创建一个新的文件content.js,用于在页面中注入JavaScript代码来收集图片URL

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
 if (request.action === 'collectImages') {
     var images = Array.from(document.getElementsByTagName('img')).map(function(img) {
         return img.src;
     });

     chrome.runtime.sendMessage({
         action: 'sendImages',
         images: images
     });
 }
});

🔎3.3 popup.js

在popup.js文件中添加以下代码以实现按钮点击事件,获取当前Tab页中的所有图片:

document.addEventListener('DOMContentLoaded', function() {
  document.getElementById('collectButton').addEventListener('click', function() {
    chrome.tabs.query({ active: true, currentWindow: true }, function(tabs) {
      chrome.tabs.sendMessage(tabs[0].id, { action: 'collectImages' }, function(response) {
        
      });
    });
  });
});

chrome.runtime.onMessage.addListener(function(response, sender, sendResponse){
  console.log(response, 'response')
  var imageList = document.getElementById('imageList');
  imageList.innerHTML = '';

  response.images.forEach(function(imageUrl) {
    var listItem = document.createElement('li');

    var image = document.createElement('img');
    image.src = imageUrl;

    listItem.appendChild(image);
    imageList.appendChild(listItem);
  });
});

🔎3.4 manifest.json

在manifest.json文件中添加以下内容以配置扩展

{
  "manifest_version": 2,
  "name": "Image Collector",
  "version": "1.0",
  "description": "Collect all images in the current tab",
  "browser_action": {
    "default_popup": "popup.html"
  },
  "permissions": [
    "contextMenus",
		"tabs",
		"notifications",
		"webRequest",
		"webRequestBlocking",
		"storage",
		"http://*/*",
		"https://*/*"
  ],
  "icons": {
    "16": "icon.png"
  },
  "background": {
    "scripts": ["background/background.js"]
  },
  "content_scripts": [
    {
			"matches": ["<all_urls>"],
			"js": ["js/jquery-1.11.0.min.js", "content/content-script.js"],
			"run_at": "document_start"
		}
  ]
}

🔎3.5 效果展示

在这里插入图片描述

🚀四、总结

本文介绍了如何开发一个简单的Chrome扩展程序,该程序能够在面板上显示一个按钮,点击按钮后可以跳转到百度。从创建扩展程序文件夹到加载扩展程序,我们一步一步地完成了整个过程。同时也给出了一个较为进阶一点的通信交互图片抓取实战。如果你对Chrome扩展程序的开发有兴趣,可以尝试开发更加复杂和功能丰富的扩展程序,去满足更多的需求和挑战。祝你成功!

图片抓取实战源码在文章顶部,有需要可以去下载。

在这里插入图片描述

今天的内容就到这里,我们下次见。

更多推荐

大数据与人工智能的未来已来

大数据与人工智能的定义大数据:大数据指的是规模庞大、复杂性高、多样性丰富的数据集合。这些数据通常无法通过传统的数据库管理工具来捕获、存储、管理和处理。大数据的特点包括"3V":大量(Volume):大数据集合包含大量的数据,通常是以TB(千兆字节)或PB(百万兆字节)为单位。多样性(Variety):大数据包括各种类型

【无标题】

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群背景介绍Notebook解决的问题部分任务类型(python、spark等)在创建配置阶段,需要进行分步调试;由于探索查询能力较弱,部分用户只能通过其他平台or其他途径进行开发调试,但部署到Dorado时,又发现行为不一致等问题(运行环

服务器管理

腾讯云服务器相关管理linux下安装python3linux自带2.x,有时候需要2.x执行一些工具,开发的时候又想用p3,就需要同时装python2和python3依次执行以下命令sshxxx@xx.xx.xx.xx#进入linux服务器su#输入密码,如果不知道管理员账户但拥有sudo权限,下面所有命令前缀都跟su

Kafka消息发送可靠性分析

ApacheKafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者和生产者之间的所有实时数据。Kafka的主要特性包括:高吞吐量、可扩展性、持久性、分布式、可容错等。这些特性使得Kafka成为大规模数据处理和实时数据分析的理想选择。然而,关于Kafka的一个常见问题是其消息发送的可靠性。下面我们将详细分析K

504 错误码排查

当出现504错误码时,表示请求超时,服务器无法及时响应请求,需要检查下应用是否有什么耗时的操作,比如是否出现了SQL慢查询、是否接口发生死循环、是否出现死锁等,同时需要关注服务器系统负载高不高。网络异常接口原本好好的,突然出现超时,最常见的原因可能是网络出现异常,比如:偶然的网络抖动,或者是带宽被占满了。网络抖动:大多

Jmeter系列-定时器Timers的基本介绍(11)

简介JMeter中的定时器(Timer)是一种重要的元件,用于模拟用户在不同时间间隔内发送请求的场景。通过使用定时器,可以模拟负载、并发和容量等不同情况下的请求发送频率。使用定时器可以在取样器下添加定时器,这样定时器只会作用于当前取样器也可以在线程组下添加多个定时器,统计定时器的总和,然后作用于线程组下的所有取样器定时

Android studio 快捷键

目录Ctrl+N搜索指定的Java类Ctrl+F查找文本Alt+Enter修复代码错误Ctrl+Alt+L格式化代码Ctrl+D复制当前行或选中的内容Ctrl+W逐渐增加当前选中的范围Ctrl+Shift+-折叠所有代码Ctrl+Shift++展开所有代码Ctrl+B查看定义Ctrl+Alt+B查看实现Ctrl+Alt

系统架构设计师(第二版)学习笔记----信息系统基础

【原文链接】系统架构设计师(第二版)学习笔记----信息系统基础文章目录一、信息系统概述1.1信息系统的5个基本功能1.2信息系统发展阶段1.3初始阶段的主要特点1.4传播阶段的主要特点1.5控制阶段的主要特点1.6集成阶段的主要特点1.7信息系统的种类1.8企业主要使用的信息化系统1.9信息系统的生命周期阶段1.10

第一章:最新版零基础学习 PYTHON 教程(第三节 - 下载并安装Python最新版本)

在这里,我们将讨论如何获得与在Windows/Linux/macOS上安装Python相关的所有问题的答案。Python由GuidovanRossum于20世纪90年代初开发,最新版本为3.11,我们可以简称为Python3。如何下载并安装Python?要了解如何安装Python,您需要了解Python是什么以及它实际

实时多人关键点检测系统:OpenPose | 开源日报 0907

CMU-Perceptual-Computing-Lab/openposeStars:27.9kLicense:NOASSERTIONOpenPose是一个开源项目,它是第一个能够在单个图像上联合检测人体、手部、面部和脚步关键点(总共135个关键点)的实时多人系统。该项目具有以下核心优势:2D实时多人关键点检测功能支持

PyTorch深度学习实战(11)——卷积神经网络

PyTorch深度学习实战(11)——卷积神经网络0.前言1.全连接网络的缺陷2.卷积神经网络基本组件2.1卷积2.2步幅和填充2.3池化2.3卷积神经网络完整流程3.卷积和池化相比全连接网络的优势4.使用PyTorch构建卷积神经网络4.1使用PyTorch构建CNN架构4.2验证CNN输出小结系列链接0.前言卷积神

热文推荐