油猴脚本编写初探:自动登录下载Oracle产品


油猴脚本编写初探:自动登录下载Oracle产品

Weblogic、JDK等都是Oracle产品,大家都知道Oracle的官网都是要注册登录之后才能下载产品的,实在非常麻烦。所以利用油猴脚本将这一系列过程脚本化:以后无需注册和登录,访问即可下载。😳😳😳

image-20240316233804230 image-20240316233851081

油猴介绍

大家都知道油猴是浏览器的插件,油猴GreaseMonkey(GM) 用户脚本的原理相当于在网页上插入一段 JavaScript(xx.js) 脚本,以实现对网页的定制和修改。

JS 所能实现的功能,GM 脚本都能实现。但 GM 它的强大并不限与此,还能实现如跨域请求(GM_xmlhttpRequest)、更改剪切版(GM_setClipboard)等原生 JS 无法实现的功能。

用户脚本的元数据🌟

元数据格式

// ==UserScript==
// @属性名 属性值
// ==/UserScript==

元数据范例

// ==UserScript==
// @name auto_login_oracle
// @namespace https://login.oracle.com/mysso/signon.jsp
// @description 自动登录oracle网站。
// @match https://login.oracle.com/mysso/signon.jsp
// @version 1.0
// @grant none
// ==/UserScript==

属性名 作用
name 油猴脚本的名字
namespace 命名空间,用来区分相同名称的脚本,一般写成作者名字或者网址就可以了
version 脚本的版本号
icon 可以指定脚本的图标,显示在脚本管理器中
description 描述,用来告诉用户这个脚本是干什么用的
author 作者名字
match 这是一个数组,包含了脚本要运行的网页地址。可以使用通配符和正则表达式
exclude 与match属性相反,指定脚本不应运行的网页地址
grant 在元数据中声明使用哪些API函数
require 如果脚本依赖其他js库的话,引用一个外部链接的脚本作为库使用(在运行脚本之前先加载其他库),常见用法是加载jquery。例如:// @require http://cdn.staticfile.org/jquery/2.1.1/jquery.min.js 【也可以引用本地文件】
resource 用于定义脚本所需的外部资源,如CSS文件、图片等
connect 当用户使用GM_xmlhttpRequest请求远程数据的时候,需要使用connect指定允许访问的域名,支持域名、子域名、IP地址以及*通配符
@run-at 指定脚本的执行时机,不同的应用场景可能需要不同的执行时机 ,其中@run-at 的取值可以参见下表
元数据标记@run-at 的取值如下
取值 描述
document-start 指定脚本在DOM树开始的时候执行,需要脚本尽早执行的时候添加此声明。
document-end 指定脚本在DOM数据加载完毕的时候执行
document-idle 页面加载完毕的时候执行。当元数据没有@run-at声明时,脚本默认在此时机执行
main-menu X浏览器的扩展声明,表示此脚本不自动执行,用户通过主菜单扩展选项手动执行。
context-menu X浏览器扩展声明,表示此脚本不自动执行,用户通过长按菜单的扩展选项执行
tool-menu X浏览器扩展声明,表示此脚本不自动执行,用户通过页面工具菜单的扩展选项执行
元数据标记@grant 的取值GM API

油猴提供了很多强大的 API,它们可以使很操作变得相当简单

注意每个 API 在使用前需要在元数据中用 @grant 进行声明,若你不打算使用这些 API,应当声明 @grant none

旧的 API GM_* 通常是同步的,而新的 API GM.* 是异步的

旧 API 新 API 说明
GM_info GM.info 返回当前脚本的元数据
GM_addStyle 为网页添加 CSS
GM_setValue GM.setValue 在本地储存值(只能是字符串),你可以将这个储存看作是 localStorage 一样的东西
GM_getValue GM.getValue 获取使用储存的值
GM_deleteValue GM.deleteValue 删除储存的值
GM_listValues GM.listValues 返回一个由所有储存值的键名组成的数组
GM_getResourceText 获取元数据中定义的 @resource 的资源内容
GM_getResourceURL GM.getResourceUrl 获取元数据中定义的 @resource 资源的 URL(base64 编码后的data:协议地址)
GM_openInTab GM.openInTab 新标签页打开指定地址(用来绕过 Chrome 会阻止所有非用户触发的window.open的限制)
GM_registerMenuCommand 向油猴插件菜单中添加脚本指令(通常用于打开自己写的设置界面或者执行代码之类的)
GM_setClipboard GM.setClipboard 复制指定内容到剪贴板
GM_xmlhttpRequest GM.xmlHttpRequest 发送网络请求,且允许跨域
GM.notification 浏览器通知

代码实现:自动登录下载Oracle产品🌟🌟🌟🌟

1:发现账号密码🌟

https://login.oracle.com/mysso/signon.jsp

有很多公开的能用的账号密码,可以直接用。(为了避免失效也可以自己注册用自己的。)

erfede@yopmail.com
Bellapete!1
2:找准id🌟

image-20240317141119665

有两种实现 其实差不多

image-20240317154027298

3:脚本实现:auto_login_oracle🌟
// ==UserScript==
// @name auto_login_oracle
// @namespace https://highgerms.github.io
// @description 自动登录oracle网站。
// @match https://login.oracle.com/mysso/signon.jsp
// @version 1.0
// @grant none
// @author highgerms
// ==/UserScript==

(function() {
'use strict';

// 替换为实际的用户名和密码
var username_exist = "erfede@yopmail.com";
var password_exist = "Bellapete!1";

// 等待页面加载完成
window.onload = function() {
// 延迟一段时间确保页面上的所有元素都加载完毕
setTimeout(function() {
// 填写用户名和密码
var inputuser = document.getElementById('sso_username');
inputuser.value = username_exist;
var inputpass = document.getElementById('ssopassword');
inputpass.value = password_exist;
// 获取登录按钮
var signinButton = document.getElementById("signin_button");
if (signinButton) {
// 提交表单登录
signinButton.click();
} else {
console.error("登录按钮未找到");
}
}, 3000); // 3000毫秒延迟
};
})();

4:脚本实现:auto_login_oracle_by_input🌟
// ==UserScript==
// @name auto_login_oracle
// @namespace https://highgerms.github.io
// @description 自动登录oracle网站。
// @match https://login.oracle.com/mysso/signon.jsp
// @version 1.0
// @grant none
// @author highgerms
// ==/UserScript==

(function() {
'use strict';
var tmp = document.getElementById("sso_username");
if(!tmp)
{
if(document.getElementsByTagName('input')[5].name == "ssousername" && document.getElementsByTagName('input')[6].name == "password")
{
document.getElementsByTagName('input')[5].value = "erfede@yopmail.com"; /*用户名*/
document.getElementsByTagName('input')[6].value = "Bellapete!1"; /*密码*/
document.getElementsByTagName('input')[7].click();
}
}
else
{
document.getElementById("sso_username").value = "erfede@yopmail.com"; /*比赛用的用户名*/
document.getElementById("ssopassword").value = "Bellapete!1"; /*密码*/
document.getElementById("signin_button").click();
}
// Your code here...
})();

其他:设置加载本地脚本

设置教程
https://bbs.tampermonkey.net.cn/thread-1550-1-1.html

image-20240317143727312

image-20240317143752415

image-20240317143442364

思考🌟🌟

利用这些还能 设置自动定时刷新那些安全产品网页:防止漏看安全事件(值守必备)🌟、屏蔽网站广告🌟、知乎免登录看全文🌟、获取百度网盘直链🌟、CSDN免登录复制🌟、网易云免登录下载🌟等等。

参考链接:

https://jixunmoe.github.io/gmDevBook/#/doc/intro/gmScript

https://www.tampermonkey.net/documentation.php#meta:sandbox


  目录