Chrome浏览器扩展开发之自动化操作页面

简介: Chrome浏览器扩展开发之自动化操作页面

Chrome浏览器支持扩展(Extension)开发,来定制扩展现有的功能,如:自动登录,定时刷新,抢票等功能,本文以一个简单的小例子,简述Google Chrome 扩展开发的基本步骤,仅供学习分享使用。

什么是Chrome扩展?

Chrome扩展使用HTML、JavaScript、CSS和图片等Web技术开发,用以增强Chrome浏览器功能的一种程序。Chrome扩展并不是插件,扩展无需了解浏览器的源代码,只需要Web相关开发技术即可,而插件是更底层的浏览器功能扩展,需要深入掌握浏览器的源代码。

Chrome扩展组成部分

Chrome扩展,至少包括一个manifest.json和一个js文件

  • manifest.json是扩展的调度中心,用于声明各种资源。该文件采用JSON格式定义
  • js文件中定义要执行的操作

Chrome扩展,通常还可以包括图标、页面和CSS等资源

  • 图标通常是19px*19px的PNG文件
  • 页面通常是HTML文件,用于定义显示给用户的窗口,如popup页面或options页面等【注意】:控制popup窗口或options窗口的分别是popup.js和options.js文件
  • CSS是常见的定义页面样式的文件

作为一个Google Chrome扩展,上述所有文件应该都位于一个根目录之下,各个不同类型的文件可以位于不同的子目录下。

Chrome扩展部署运行

Chrome扩展作为浏览器的一部分而存在,运行无需依赖任何Web服务器。通过Chrome 浏览器打开chrome://extensions页面可以查看当前Chrome 浏览器部署的全部扩展,或者通过Chrome 浏览器的“ ->更多工具->扩展程序”打开。

开启【开发者模式】,然后【加载已解压的扩展程序】即可进行运行调试程序,如果修改了程序,可以点击【重新加载】更新程序。chrome://extensions页面如下:

示例效果图

本例主要是监控某网站某件商品是否存在且是否有货,如果存在,则加入购物车 。Chrome扩展加载后,就会在浏览器地址栏右边,显示图标,单击显示popup页面,如下所示:

Chrome浏览器扩展还有配置选项页面,用于扩展说明,配置相关信息等,通过右键图标按钮-->选项打开对应页面,或者在扩展详细信息-->扩展程序选项进行打开,如下所示:

核心代码

本例主要核心文件有manifest.json,如下所示:

{
    "manifest_version": 2,
    "name": "iSmoking",
    "version": "1.0.0",
    "description": "iSmoking监控程序",
    "icons":
    {
        "16": "img/smoking.png",
        "48":"img/smoking.png",
        "128": "img/smoking.png"
    },
    "background":
    {
        "scripts": ["js/jquery-3.5.1.min.js","js/background.js"]
    },
    "browser_action":
    {
        "default_icon": "img/smoking.png",
        "default_title": "iSmoking监控程序",
        "default_popup": "popup.html"
    },
    "content_scripts":
    [
        {
            "matches": ["https://www.smokingpipes.com/*"],
            "js": ["js/jquery-3.5.1.min.js", "js/content.js"],
            "run_at": "document_end",
            "all_frames":true
        }
    ],
    "permissions":
    [
        "contextMenus",
        "tabs",
        "notifications",
        "webRequest",
        "webRequestBlocking",
        "storage",
        "https://www.smokingpipes.com/*"
    ],
    "options_ui":
    {
        "page": "options.html",
        "chrome_style": true
    }
}

其中browser_action 用于配置适用于整个浏览器对象的功能,如果只针对某一个页面生效,可以使用page_action , 且二者不可以并存。

Popup页面即点击图标弹出的对应的页面,可以引用JS进行业务处理,也可以和Background(后台一直存在的程序)或者 ContentScript(用户操作Dom)进行通信。

<!doctype html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
    <title>iSmoking监控</title>
    <link rel="stylesheet" href="css/popup.css">
    <script src="js/jquery-3.5.1.min.js"></script>
    <script src="js/popup.js"></script>
  </head>
  <body>
    <h1>iSmoking监控</h1>
      <div id="option">
           <span>当前用户名:</span> <input type="text" name="username" id="username" class="txt" readonly><br /></span> <input type="hidden" name="password" id="password"><br />
           <span>当前商品Id:</span> <input type="text" name="itemid" id="itemid" class="txt" readonly><br />
           <span>监控数量:</span> <input type="text" name="count" id="count" class="txt" readonly><br />
      </div>
      <div>
         <input type="button" value="" name="start" id="start" class="button start">
      <input type="button" value="" name="stop" id="stop" class="button stop">
      </div>
  </body>
</html>

Popup和Content进行通信,

$(function () {
    var keys = ["ismoking_username", "ismoking_password", "ismoking_itemid","ismoking_count","ismoking_status"];
    //从storage中获取之前保存的内容
    $("#username").val(localStorage.getItem(keys[0]));
    $("#password").val(localStorage.getItem(keys[1]));
    $("#itemid").val(localStorage.getItem(keys[2]));
    $("#count").val(localStorage.getItem(keys[3]));
    $("#start").click(function () {
        var key_msg={"ismoking_username":localStorage.getItem(keys[0]), "ismoking_password":localStorage.getItem(keys[1]),"ismoking_itemid":localStorage.getItem(keys[2]),"ismoking_count":localStorage.getItem(keys[3]),"ismoking_status":"begin"};
        console.log(JSON.stringify(key_msg));
        sendMessageToContentScript(key_msg,function(msg){
            console.log("收到成功"+msg);
        });
    });
    $("#stop").click(function () {
        var key_msg={"ismoking_username":localStorage.getItem(keys[0]), "ismoking_password":localStorage.getItem(keys[1]),"ismoking_itemid":localStorage.getItem(keys[2]),"ismoking_count":localStorage.getItem(keys[3]),"ismoking_status":"stop"};
        console.log(JSON.stringify(key_msg));
        sendMessageToContentScript(key_msg,function(msg){
            console.log("收到成功"+msg);
        });
    });
});
// 获取当前选项卡ID
function getCurrentTabId(callback)
{
    chrome.tabs.query({active: true, currentWindow: true}, function(tabs)
    {
        if(callback) callback(tabs.length ? tabs[0].id: null);
    });
}
// 向content-script主动发送消息
function sendMessageToContentScript(message, callback)
{
    getCurrentTabId((tabId) =>
    {
        chrome.tabs.sendMessage(tabId, message, function(response)
        {
            if(callback) callback(response);
        });
    });
}

然后通过ContentScript监听信息,如下所示:

// 接收来自后台的消息
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse)
{
    console.log('收到来自 ' + (sender.tab ? "content-script(" + sender.tab.url + ")" : "popup或者background") + ' 的消息:', request);
    for (const key in request) {
        if (request.hasOwnProperty(key)) {
            const element = request[key];
            localStorage.setItem(key,element);
        }
    }
    // tip(JSON.stringify(request));
    sendResponse('我收到你的消息了:'+JSON.stringify(request));
    var status = request[keys[4]];
    if(status=="begin"){
        doing1();
    }
});

提示:功能实现和前两篇博客基本一样,只是实现方式略有差异。关于Chrome扩展的开发文档,可以参考链接 或者 扩展开发极客博客

备注

人不轻狂枉少年,一首宋词放松一下:

鹧鸪天·西都作

【宋】朱敦儒

我是清都山水郎,天教分付与疏狂。

曾批给雨支风券,累上留云借月章。

诗万首,酒千觞。几曾着眼看侯王?

玉楼金阙慵归去,且插梅花醉洛阳。

相关文章
|
5月前
|
Web App开发 安全 iOS开发
基于PyCharm与Mac系统的Chrome历史记录清理工具开发实战
《基于PyCharm与Mac系统的Chrome历史记录清理工具开发实战》详细解析了如何在macOS下通过Python脚本自动化清理Chrome浏览器的历史记录。文章以`clear_chrome_history.py`为例,结合PyCharm开发环境,深入讲解技术实现。内容涵盖进程检测、文件清理、虚拟环境配置及断点调试技巧,并提供安全增强与跨平台适配建议。该工具不仅保障个人隐私,还适用于自动化运维场景,具备较高实用价值。
115 0
|
4月前
|
数据采集 前端开发 JavaScript
深挖navigator.webdriver浏览器自动化检测的底层分析
本文详细讲解了如何通过技术手段破解浏览器 `navigator.webdriver` 检测,结合爬虫代理、多线程等策略,在豆瓣图书页面批量采集数据。具体包括:隐藏 Selenium 特征、配置代理突破 IP 限制、设置伪装用户、利用多线程提升效率。文章面向初学者,提供分步教程与示例代码,同时设有「陷阱警告」帮助规避常见问题。目标是从底层实现反检测,高效采集图书评分、简介、作者等信息,适合具备 Python 和 Selenium 基础的读者实践学习。
162 12
深挖navigator.webdriver浏览器自动化检测的底层分析
|
10月前
|
Web App开发 JavaScript 前端开发
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念,包括事件驱动、单线程模型和模块系统;探讨其安装配置、核心模块使用、实战应用如搭建 Web 服务器、文件操作及实时通信;分析项目结构与开发流程,讨论其优势与挑战,并通过案例展示 Node.js 在实际项目中的应用,旨在帮助开发者更好地掌握这一强大工具。
271 1
|
5月前
|
数据采集 JavaScript 前端开发
浏览器自动化检测对抗:修改navigator.webdriver属性的底层实现
本文介绍了如何构建一个反检测爬虫以爬取Amazon商品信息。通过使用`undetected-chromedriver`规避自动化检测,修改`navigator.webdriver`属性隐藏痕迹,并结合代理、Cookie和User-Agent技术,实现稳定的数据采集。代码包含浏览器配置、无痕设置、关键词搜索及数据提取等功能,同时提供常见问题解决方法,助你高效应对反爬策略。
435 1
|
8月前
|
Web App开发 人工智能 JSON
AutoMouser:AI Chrome扩展程序,实时跟踪用户的浏览器操作,自动生成自动化操作脚本
AutoMouser是一款Chrome扩展程序,能够实时跟踪用户交互行为,并基于OpenAI的GPT模型自动生成Selenium测试代码,简化自动化测试流程。
503 17
AutoMouser:AI Chrome扩展程序,实时跟踪用户的浏览器操作,自动生成自动化操作脚本
|
9月前
|
人工智能 自然语言处理 JavaScript
Agent-E:基于 AutoGen 代理框架构建的 AI 浏览器自动化系统
Agent-E 是一个基于 AutoGen 代理框架构建的智能自动化系统,专注于浏览器内的自动化操作。它能够执行多种复杂任务,如填写表单、搜索和排序电商产品、定位网页内容等,从而提高在线效率,减少重复劳动。本文将详细介绍 Agent-E 的功能、技术原理以及如何运行该系统。
656 5
Agent-E:基于 AutoGen 代理框架构建的 AI 浏览器自动化系统
|
8月前
|
Web App开发 数据采集 JavaScript
Chrome浏览器实例的TypeScript自动化脚本
Chrome浏览器实例的TypeScript自动化脚本
|
10月前
|
数据采集 JavaScript 前端开发
浏览器自动化
浏览器自动化利用工具(如Selenium WebDriver、Puppeteer)模拟用户行为,实现测试、数据抓取等功能。它涵盖启动/关闭浏览器、元素定位操作、事件模拟、性能及可访问性测试等,广泛应用于Web应用的开发与维护,提升测试效率和可靠性。
|
10月前
|
Web App开发 人工智能 自然语言处理
WebChat:开源的网页内容增强问答 AI 助手,基于 Chrome 扩展的最佳实践开发,支持自定义 API 和本地大模型
WebChat 是一个基于 Chrome 扩展开发的 AI 助手,能够帮助用户理解和分析当前网页的内容,支持自定义 API 和本地大模型。
811 1
|
10月前
|
数据采集 Web App开发 JavaScript
爬虫策略规避:Python爬虫的浏览器自动化
爬虫策略规避:Python爬虫的浏览器自动化

热门文章

最新文章