作者 herokay 发布的文章

Tampermonkey挂机常用代码片段

跳转

 window.location.href = "http://www.herokay.com/";

延时执行

为什么不用setTimeout??自行体会

    window.sleep = function(ms){
        return new Promise(resolve => setTimeout(resolve, ms || 1000))
    };
    // 延时3秒后进入未学课程
    (async () => {
        await sleep(3000);
        //执行后执行代码
    })();

遍历元素

 $("li.ovd").each(function()
{
    //执行代码
});

点击元素

$(el).trigger("click");
$("#img_right")[0].click();

使用本地js

// @require      file:///C:/js/jquery.js

屏蔽alert弹窗

unsafeWindow.alert=function(msg) {console.info(msg);};
window.alert=function(msg){console.info(msg);};

失去焦点暂停

window.onblur=null;

移除事件

下面代码仅限控制台使用,因为getEventListeners属于Devtool API,js无法直接使用

getEventListeners(document).visibilitychange.forEach(fn => document.removeEventListener("visibilitychange",fn.listener));

下面代码通用,在tampermonkey中加入run-at document-start

let oldadd=EventTarget.prototype.addEventListener
EventTarget.prototype.addEventListener=function (...args)
{
    if(args[0] == "visibilitychange")
    {
        console.info("拦截成功");
    }
    else
    {
        oldadd.call(this,...args);
    }
}

Tampermonkey入门

一、什么是Tampermonkey?

Tampermonkey 是一款免费的浏览器扩展和最为流行的用户脚本管理器,它适用于 Chrome, Microsoft Edge, Safari, Opera Next, 和 Firefox等。
中文网站:https://www.tampermonkey.net/
国内用户常用的360浏览器、极速浏览器、QQ浏览器等都是基于Chrome内核,Tampermonkey仍然适用。
类似的工具还有GreasyMonkey,两者基本互通。

二、如何安装Tampermonkey?

(一)chrome浏览器安装Tampermonkey

由于某些原因,国内没法打开谷歌的webstore,这里以手动安装演示。(能翻墙打开webstore的直接在线安装即可)

参考下图:自定义及控制Google chrome——>更多工具——>扩展程序

启用开发者模式——>加载已解压的扩展程序


将提前下载解压好的文件夹选中即完成安装。
下载好的的tampermonkey是个压缩包,解压后得到一个XXXX.crx文件,将后缀crx改成zip即可解压或者点右键打开方式选择解压缩软件进行解压。

(二)360浏览器

打开插件管理——管理——添加更多扩展


搜索tampermonkey安装即可

三、安装脚本

(一)在线搜索安装

https://greasyfork.org/zh-CN
https://www.tampermonkey.net/index.php?ext=dhdg
这类网站上有大量的脚本可以在线安装,比如百度文库复制等。。。

(二)导入脚本

打开Tampermonkey管理面板

实用工具——压缩包,选择压缩包即可导入

四、运行脚本

当打开脚本运行的网页后脚本会自动运行,红色角标中的数字是当前页面运行的脚本数量。

五、写脚本

编写脚本设计js相关知识,建议对html、css、js有一定基础后再开始编写自己的脚本。

备用下载地址:
Tampermonkey.rar

2022年江西省全员培训半自动化脚本

项目地址:http://html.study.teacheredu.cn/el/proj_21181/index.html
脚本功能:学习过程中不用弹窗确定

// ==UserScript==
// @name         江西edu
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        http://study.teacheredu.cn/proj/studentwork/study.htm?courseId=*
// @grant   unsafeWindow
// ==/UserScript==

(function() {
    'use strict';

    // Your code here...
    // 延时3秒后进入未学课程
    window.sleep = function(ms){
        return new Promise(resolve => setTimeout(resolve, ms || 1000))
    };
    // 延时3秒后进入未学课程
    (async () => {
        console.info("一分钟后载入脚本...");
        await sleep(60*1000);
        console.info("尝试载入...");
        unsafeWindow.alert=function(msg) {console.info(msg);};
        window.alert=function(msg){console.info(msg);};
        console.info("载入成功!");
    })();

})();

脚本下载:
tampermonkey_scripts.zip

python修改PDF文件title(metadata值)

安装库

pip310 install --trusted-host mirrors.aliyun.com pdfrw -i http://mirrors.aliyun.com/pypi/simple/

pdfrw库地址:https://github.com/pmaupin/pdfrw

from pdfrw import PdfReader,PdfWriter
import os

new_title = "www.herokay.cn"
files = os.listdir('./')
for file_path in files:
    if os.path.splitext(file_path)[-1]==".pdf":
        trailer = PdfReader(file_path)
        print(trailer.Info.Title,"\t=>\t",new_title,)
        trailer.Info.Title = new_title
        PdfWriter(file_path, trailer=trailer).write()
print("finish")

wps js宏试水(按名称拆分文件)

一个xlsx文件里面有四张表,汇总表按部门名称统计“附表1”,“附表2”,“附表3”三张表中的数据,现在在汇总表中选中一个部门的名称后运行宏,四张表都只保留选中部门的数据,并且以部门名称保存该文件。
这种应用场景也是挺广的,汇总了部门的数据,给某个部门反馈的时候运行宏即可导出,

function splite_xls()
{
    //当前选中单元格的值    
    sl=Selection.Value2;
    if(MsgBox("只保留 " + sl,1)==2)
        return
    var i;
    //清理汇总表
    for(i=42;i>3;i--)
    {
        if(Sheets.Item("汇总").Range("A"+i).Value2!=sl)
            Sheets.Item("汇总").Range("A"+i).EntireRow.Delete(xlShiftUp);
    }
    //清理附表1
    for(i=1500;i>4;i--)
    {
        if(Sheets.Item("附表1").Range("H"+i).Value2!=sl)
            Sheets.Item("附表1").Range("H"+i).EntireRow.Delete(xlShiftUp);
    }
    //清理附表2
    for(i=200;i>4;i--)
    {
        if(Sheets.Item("附表2").Range("F"+i).Value2!=sl)
            Sheets.Item("附表2").Range("F"+i).EntireRow.Delete(xlShiftUp);
    }
    //清理附表3
    for(i=1300;i>4;i--)
    {
        if(Sheets.Item("附表3").Range("I"+i).Value2!=sl)
            Sheets.Item("附表3").Range("I"+i).EntireRow.Delete(xlShiftUp);
    }
    ActiveWorkbook.SaveAs("/data/" + sl + ".xlsx", undefined, undefined, undefined, undefined, undefined, xlNoChange, 1, -1, undefined, undefined);
    MsgBox("保存成功");
}