网页JS自动化脚本(八)使用网页专属数据库indexedDB进行数据收集

  • 我们在网页上进行的活动,往往都需要进行收集一些简单的数据,但是因为浏览器的安全原因,浏览器基本上是无法与本地的操作系统直接产生数据交互的,这本来就是一个由于安全问题生产的无解问题,在浏览器里面是内置了几种数据库的,其中一种就是indexedDB,可以用来储存一些非常小的数据字段, 我们按下F12打开可以看到,如下图就是我这一次想说的是一种直接利用当前网址的数据库的手段.
    请添加图片描述
  • 之所以说是当前网址,是因为indexedDB数据库本来就是为每个不同的网址分配的,它实际上就是服务器在用户电脑上的临时用地,也就相当于是租借地,有点像香港和澳门的性质,这块地被划给了服务器可以用来储存一些数据,操作的权限完全归这个网页所有
  • 所以我们可以利用这个专用数据库来储存固定页的数据,这次做一个收集热搜的功能,也就是每次打开页面,JS就会自动收集热搜词条,从上面的截图中,我们可以看到热搜中的一条被添加进了右侧的数据库当中,顶部就是一个弹窗的功能显示当前的数据库
  • 可以看到右侧的数据库中左侧#号是序号,而第二竖列是Key也就是关键词排序,右侧 value就是数据的具体内容了
  • 数据库的结构:indexedDB------>ShuJuKu----->BiaoGe 是这样子的三级关系,数据库----库名----表格名, 库名用来关联网址, 表格名用来区分同一个网址中的不同数据,也就是可以新建多个功能不同的数据表.
  • 下面上代码:
// ==UserScript==
// @name        New script - baidu.com
// @namespace   Violentmonkey Scripts
// @match       https://www.baidu.com/
// @grant       none
// @version     1.0
// @author      -
// @description 2023/5/29 下午2:12:47
// ==/UserScript==

var time,reSou;//时间和热搜
var bd;//数据库
var show="";//要显示的内容

window.onload=function(){
  var request = window.indexedDB.open('ShuJuKu',1);
  
  //更新数据库函数
  request.onupgradeneeded = function (event){
    db = event.target.result;
    var objectStore;
    if(!db.objectStoreNames.contains('BiaoGe')){
      objectStore = db.createObjectStore('BiaoGe',{keyPath:'TIME'});
      objectStore.createIndex('reSou','RS',{unique:false});
      alert('BiaoGe 首次创建成功');
    }
  }
  
  //打开数据库函数
  request.onsuccess = function (event) {
    db = request.result;
    show +='ShuJuKu  数据库打开成功\n';
    time=new Date().toLocaleString();  //获取当前时间
    reSou=document.querySelector("i.title-content-top-icon+span").innerText;  //获取热搜信息
    //在表格当中添加这两个数据
    db.transaction(['BiaoGe'],'readwrite').objectStore('BiaoGe').add({
      TIME:time,  RS: reSou
    });
    //执行游标函数收集所有的数据到show内
    readAll();
    //延时展示因为要等待数据库遍历函数执行完毕
    setTimeout(function(){
      alert(show);
    },500);
  }
  
  //游标遍历数据库
  function readAll(){
    var objectStore=db.transaction(['BiaoGe']).objectStore('BiaoGe');
    //游标成功打函数
    objectStore.openCursor().onsuccess=function(event){
      var item=event.target.result;
      if(show){
	     show += item.value.TIME + item.value.RS + "\n";
	     item.continue(); //继续执行(没有这行代码只能收集数据库的第一行信息)
      }
    }
  }
}
  • 我们先来看var request = window.indexedDB.open('ShuJuKu',1);这一句就是让浏览器直接打开一个名为ShuJuKu的数据库,后面的1就是数据库版本为1,执行这一行就会有多个结果,其中一个结果就是触发onupgradeneeded数据库更新,还有就是onsuccess数据库成功打开,那我们第一次访问的时候里面是没有这个数据库的,那也就是说版本为0或者是无效数据NULL,所以第一次就会触发onupgradeneeded这个函数,这个函数也是我们一定要实现的一个函数
  • 下面我们紧接着就来实现这个onupgradeneeded函数,重写的时候要带上event,因为主程序在调用的时候会传这个参数进来,db = event.target.result 从这一句获取一个数据库对象, 然后在db.objectStoreNames会返回数据表的数组,然后执行.contains('BiaoGe')判断内部是否个名称的表
  • 如果找不到这个表那就新建这个表db.createObjectStore('BiaoGe',{keyPath:'TIME'});里面的{keyPath:‘TIME’}用来确定关键排序关键词用的,主表就会以这个数据排序
  • 如果还有想用来配合查找的数据,就可以添加一个排序关键词objectStore.createIndex('reSou','RS',{unique:false});而里面的unique:false就是确定这个值在这一张大表里面是否可以重复,如果我们收集的信息男或者女那肯定会有重复对不对,如果收集的是时间,那肯定是没有重复的,在加上了这一行代码之后,我们的表格里就会多出一张以reSou为关键词的表,方便我们后期查找数据的时候使用这个数据进行定位

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++进阶 —— 线程库(C++11新特性)

十,线程库 thread类的简单介绍 在C11之前涉及多线程问题,都是和平台相关的,如windows和Linux下各有自己的接口,这使代码的可移植性较差;C11中最重要的特性就是对线程进行支持,使得C在并行编程时不需要依赖…

Axure教程—水平方向多色图(中继器)

本文将教大家如何用AXURE制作动态水平方向多色图 一、效果介绍 如图: 预览地址:https://l83ucp.axshare.com 下载地址:https://download.csdn.net/download/weixin_43516258/87822666 二、功能介绍 简单填写中继器内容即可生成动态水平多色…

Linux-模拟一个简单的shell

什么是shell外壳?就是操作系统给我们的一个命令行解释器,在Linux系统中,它的shell叫做bash。 那么bash本质是什么呢? 本质就是一个文件,一个进程。 万物皆文件 每个操作系统的shell都是很复杂的,想要…

【Matter】使用chip tool在ESP32-C3上进行matter开发

文章目录 使用chip tool在ESP32-C3上进行matter开发前提准备编译 chip-tool1.激活esp-matter环境2.编译matter所需环境3.构建CHIP TOOL chip-tool client 调试设备说明1.基于 BLE 调试2.通过IP与设备配对3.Trust store4.忘记当前委托的设备 使用chip-tool点灯1.matter环境激活2…

linuxOPS基础_Linux系统的文件目录结构及用途

linux系统文件目录结构 Linux 系统不同于 Windows,没有 C 盘、D 盘、E 盘那么多的盘符,只有一个根目录(/),所有的文件(资源)都存储在以根目录(/)为树根的树形目录结构中…

【大数据之Hive】四、配置Hive元数据存储到MySQL

需求:   把Hive元数据写道MySQL的metastore数据库中(MySQL默认没有metastore数据库,需要提前创建:create database metastore;)   连接地址:jdbc:mysql//hadoop102:3306/metastore   驱动&#xff1a…

什么是SOAP

什么是SOAP 什么是SOAP? SOAP (Simple Object Access Protocol) 是一种基于XML的通信协议,用于在网络上交换结构化的信息。它被广泛用于分布式系统中的应用程序间通信。 SOAP定义了一组规范,描述了消息的格式、通信的方式和处理消息的过程。它允许应…

第四章 程序的控制结构

文章目录 第四章 程序的控制结构4.1 程序的三种控制结构4.1.1 程序流程图4.1.2 程序控制结构基础4.1.3 程序控制结构扩展 4.2 程序的多分支结构4.2.1 单分支结构:if4.2.2 二分支结构:if-else4.2.3 多分支结构:if-elif-else4.2.4 判断条件及组…

图及其与图相关的算法

⭐️前言⭐️ 本篇文章主要介绍图及其与图相关的算法 🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍉博主将持续更新学习记录收获,友友们有任何问题可以在评论区留言 🍉博客中涉及源码及博主…

智慧档案馆八防是怎么建设的?都需要注意哪些内容

智慧档案馆八防环境监控系统一体化解决系统方案 智慧档案库房一体化平台通过智慧档案管理,实现智慧档案感知协同处置功能;实现对档案实体的智能化识别、定位、跟踪监控;实现对档案至智能密集架、空气恒湿净化一体设备、安防设备&#xff0c…

Linux守护进程

守护进程 Linux/Unix 会话 会话首进程 进程组 组长进程:第一个启动的进程叫组长进程。 关闭终端:进程组里全部进程关闭。 setsid()创建一个新的会话。(必须是组员进程才可以创建一个新的会话) 1.先fork(),退出父进程 2…

电力系统的虚假数据注入攻击和MTD系统研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

字符串最后一个单词的长度

描述 计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。(注:字符串末尾不以空格为结尾) 输入描述: 输入一行,代表要计算的字符串,非空,长度小于500…

mysql触发器监听数据投递中间件

目前市面上有许多的 CDC(Change Data Capture) 框架用于监听数据库的数据变动,例如:canal、Debezium、Maxwell等都是用来解析 binlog 日志实现事件的监听。但是有一个情况就是如果公司对 binlog 日志文件的权限管控的很严格&#…

【学习日记2023.6.2】之 管理端报表统计

文章目录 11. 管理端报表统计11.1 Apache ECharts11.1.1 介绍11.1.2 入门案例 11.2 营业额统计11.2.1 需求分析和设计11.2.2 代码开发Controller层Service层接口Service层实现类Mapper层 11.2.3 功能测试11.2.4 提交代码 11.3 用户统计11.3.1 需求分析和设计11.3.2 代码开发Con…

如何编写接口自动化框架系列通过yaml来管理测试用例(四)

本文是接口自动化测试框架系列篇的第四篇 ,主要介绍yaml包的使用 。自动化测试的本质是将功能测试用例交给代码去 目录 1. yaml介绍? 2.python中的yaml包 3.项目中使用yaml包 4 项目总结 执行 ,测试人员往往是在自动化框架添加对应的测试…

排查Javascript内存泄漏案例(一)

Chrome DevTools里的Performance面板和Memory面板可以用来定位内存问题。 如何判断应用发生内存泄漏? 为了证明螃蟹的听觉在腿上,一个专家捉了只螃蟹并冲它大吼,螃蟹很快就跑了。然后捉回来再冲它吼,螃蟹又跑了。最后专家把螃蟹的…

WPS 借助 ML Kit 无缝翻译 43 种语言,每年净省 6,500 万美元

△ 动画说明: 在笔记本电脑屏幕中,汉字 "文" 将变为字母 "A",代表文本的横线将逐一出现,就像有人在输入内容一样。 WPS 是一款办公套件软件,可让用户轻松查看和编辑其所有文档、演示文稿、电子表格等。作为一…

RK3568 AP6275S蓝牙驱动程序调度过程

1、前言 今年3月份调度了RK3568驱动程序&#xff0c;当时由于时间的问题&#xff0c;AP6275S蓝牙驱动程序没有调试成功。当时仔细检查的设备树的配置。 wireless_bluetooth: wireless-bluetooth {compatible "bluetooth-platdata";clocks <&rk809 1>;cl…

JavaCV - 图像暗通道去雾

一、效果图 二、实现原理 暗通道先验:首先说在绝大多数非天空的局部区域里,某一些像素总会有至少一个颜色通道具有很低的值,也就是说该区域光强是一个很小的值。所以给暗通道下了个数学定义,对于任何输入的图像J,其暗通道可以用下面的公式来表示:其中JC表示彩色图像每个…