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

news2024/11/27 0:48:52

在这里插入图片描述

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

文章目录

  • 🚀一、背景
  • 🚀二、插件开发流程
    • 🔎2.1. 创建扩展程序文件夹
    • 🔎2.2 添加清单文件manifest.json
    • 🔎2.3 编写HTML文件
    • 🔎2.4 编写JavaScript文件
    • 🔎2.5 加载扩展程序
  • 🚀三、网页图片抓取实战
    • 🔎3.1 background.js
    • 🔎3.2 content-script.js
    • 🔎3.3 popup.js
    • 🔎3.4 manifest.json
    • 🔎3.5 效果展示
  • 🚀四、总结


🚀一、背景

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扩展程序的开发有兴趣,可以尝试开发更加复杂和功能丰富的扩展程序,去满足更多的需求和挑战。祝你成功!

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

在这里插入图片描述

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

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

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

相关文章

软件测试框架的面试题讲解

主要对测试框架的面试题讲解。 1.测试一个杯子怎么写测试用例&#xff1f; 界面&#xff1a;杯子外观 安全性&#xff1a;杯子有没有毒或细菌 可靠性&#xff1a;杯子从不同高度落下的损坏程度&#xff1b;杯子放水放置12个小时或者24小时&#xff0c;是否漏水 可移植性&#…

Redis基础特性及应用练习-php

redis持久化&#xff08;persistence&#xff09; redis支持两种方式的持久化&#xff0c;可以单独使用或者结合起来使用。 第一种&#xff1a;RDB方式&#xff08;redis默认的持久化方式&#xff09; rdb方式的持久化是通过快照完成的&#xff0c;当符合一定条件时redis会自…

Ansible playbook简介与初步实战,实现批量机器应用下载与安装

一.Ansible playbook简介 playbook是ansible用于配置&#xff0c;部署&#xff0c;和管理被节点的剧本通过playbook的详细描述&#xff0c;执行其中的一些列tasks&#xff0c;可以让远端的主机达到预期的状态。playbook就像ansible控制器给被控节点列出的一系列to-do-list&…

webpack(四)plugin

定义 和loader的区别 loader:文件加载器&#xff0c;能够加载资源&#xff0c;并对这些文件进行一些处理&#xff0c;诸如编译、压缩等&#xff0c;最终一起打包到指定的文件中。plugin:赋予了webpack各种灵活的功能&#xff0c;例如打包优化、资源管理、环境变量注入等&…

【c++ debug】cmake编译报错 No such file or directory

1. 报错&#xff1a;error while loading shared libraries: libprotoc.so.24: cannot open shared object file: No such file or directory 问题原因&#xff1a;找不到动态库 解决方法&#xff1a;添加动态库路径 export LD_LIBRARY_PATH$LD_LIBRARY_PATH:/your/protobuf/l…

企业架构LNMP学习笔记18

nginx的日志&#xff1a; 日志类型&#xff1a; access.log 访问日志、查看统计用户的访问信息&#xff0c;流量。 error.log 错误日志&#xff0c;错误信息&#xff0c;重写信息。 access.log日志文件内容示例&#xff1a; 192.168.17.1 - - [06/Sep/2023:20:37:39 0800] …

莫迪会见英伟达ceo黄仁勋:印度在人工智能领域的巨大潜力

据外媒报道&#xff0c;印度总理纳伦德拉莫迪&#xff08;Narendra Modi&#xff09;于9月5日晚上会见了英伟达创始人兼首席执行官&#xff08;CEO&#xff09;黄仁勋&#xff0c;讨论了印度在人工智能&#xff08;AI&#xff09;领域的巨大潜力。这是莫迪和黄仁勋的第二次会面…

LC2335. 装满杯子需要的最短总时长(JAVA)

装满杯子需要的最短总时长 题目描述递归法代码演示数学法代码演示 题目描述 难度 - 简单 Leetcode - 2335. 装满杯子需要的最短总时长 现有一台饮水机&#xff0c;可以制备冷水、温水和热水。每秒钟&#xff0c;可以装满 2 杯 不同 类型的水或者 1 杯任意类型的水。 给你一个下…

通过wordpress 自定义主题的额外CSS删除指定区块

最近用wordpress建站&#xff0c;想要删除指定区块&#xff0c;发现相关的教程蛮少的&#xff0c;作为小白的我搜了相关教程&#xff0c;好像没找到&#xff0c;只能自己慢慢摸索了&#xff0c;看了很多&#xff0c;终于尝试实现了&#xff0c;特记录下&#xff0c;免得自己忘了…

国美零售上半年几乎“全军覆没”,黄光裕回归后的至暗时刻

在黄光裕“回归”的900天之后&#xff0c;国美零售&#xff08;00493&#xff09;迎来了有史以来最为艰难的至暗时刻&#xff0c;营收同比暴跌超96%&#xff0c;股价为0.053港元&#xff0c;市值仅剩25.79亿港股。 2023年8月31日&#xff0c;国美零售发布了2023年上半年财报。报…

深入研究 Spring Cloud 和 Dubbo

什么是 SpringCloud Spring Cloud 框架为开发人员提供了快速构建健壮云应用程序的工具。我们还可以构建基于微服务的应用程序&#xff0c;例如配置管理、服务发现、断路器、智能路由、集群状态、微代理、控制总线、一次性令牌等。使用 Spring Cloud&#xff0c;开发人员可以快…

F5负载均衡融入新理念,全栈分布式云可持续发展

伴随企业上云速度加快&#xff0c;市场对云计算不断提出更高要求&#xff0c;中国分布式云计算发展进入实践落地阶段。作为一个因负载均衡而闻名的公司&#xff0c;F5紧密关注“加快建设数字中国”“加快发展方式绿色转型”等重大战略&#xff0c;积极探索分布式云计算的发展的…

使用Python实现二维应力云图

要画应力分布云图&#xff0c;可以使用Python中的科学计算和可视化库来实现 import numpy as np import matplotlib.pyplot as plt# 生成示例数据 x np.linspace(0, 10, 100) # X轴数据范围 y np.linspace(0, 5, 50) # Y轴数据范围 X, Y np.meshgrid(x, y) # 生成网…

2001-2022年上市公司供应链研究数据大全

2001-2022年上市公司供应链研究数据大全 1、时间&#xff1a;2001-2022年 2、指标&#xff1a; 供应链集中度指标、第一大客户销售额、前五大客户销售额、第一大供应商采购额、前五大供应商采购额、营业总收入、第一大客户销售额占总销售额比率、第一大供应商采购额 占总采购…

axmol引擎支持构建WASM了,非常简单

自axmol-2.0.0-rc6起&#xff0c;axmol引擎带了了实验性的wasm构建支持&#xff0c;提供简单易用的命令即可构建wasm应用在浏览器上跑&#xff0c;具体步骤&#xff1a; 下载最新引擎仓库&#xff0c;git clone https://github.com/axmolengine/axmol 并进入引擎根目录Windows…

git修改默认分支

git checkout 分支 切换到当前分支 git branch --set-upstream-toorigin/complete(远程分支名) 设置当前分支的上游分支为远程分支complete git branch --unset-upstream master 取消master上游分支的身份 现在&#xff0c;使用git commit&#xff0c;git push 命令可以直接…

【数学建模竞赛】评价类赛题常用算法解析

解析常见的评价类算法 常见的评价类算法 层次分析法 层次分析法&#xff08;Analytic Hierarchy Process&#xff0c;简称AHP&#xff09;是一种主观赋值评价方法&#xff0c;由美国运筹学家Saaty于20世纪70年代初期提出。该方法将与决策有关的元素分解成目标、准则、方案等多…

C++的向上转型

在 C/C++ 中经常会发生数据类型的转换,例如将 int 类型的数据赋值给 float 类型的变量时,编译器会先把 int 类型的数据转换为 float 类型再赋值;反过来,float 类型的数据在经过类型转换后也可以赋值给 int 类型的变量。 数据类型转换的前提是,编译器知道如何对数据进行取舍…

TreeList 的 增加、删除节点-----DevExpress

private void FrmDictionaryManaged_Load(object sender, EventArgs e){// treeList1.DataSource CreateDataTable();treeList2.DataSource CreateTreeList();// 绑定TreeList控件到数据源treeList1.DataSource GetData();treeList1.KeyFieldName "ID";treeList1.…

【Python小项目之Tkinter应用】Python的GUI库Tkinter实现随机点名工具或抽奖工具并封装成.exe可执行文件

文章目录 一、项目背景二、需求分析UI界面设计如下&#xff1a;具体需求如下&#xff1a; 二、实现思路三、项目关键代码读取excel中的人员名单实现随机滚动抽取主函数中Tkinter的界面相关操作实现窗口相关背景图设置组件相关 完整代码 四、将程序封装成.exe可执行文件将代码转…