使用Tampermonkey 前端程序员竟用它入侵了github系统。。。(内附源码)

举报
拿我格子衫来 发表于 2022/03/18 00:01:59 2022/03/18
【摘要】       女朋友是做外账会计的,手上有很多报税的客户,每到月中都要检查各家的报税情况,进入国税系统,截图,命名,保存,归档.发给客户。有时候她忙不过来会让我帮忙,这样繁琐,程序化的事情,作为一名前端程序员的我准备写个脚本帮助女朋友提升一下工作效率。节省二人的时间。 装逼开始 下面开始分析一下这个脚本的...

      女朋友是做外账会计的,手上有很多报税的客户,每到月中都要检查各家的报税情况,进入国税系统,截图,命名,保存,归档.发给客户。有时候她忙不过来会让我帮忙,这样繁琐,程序化的事情,作为一名前端程序员的我准备写个脚本帮助女朋友提升一下工作效率。节省二人的时间。

装逼开始

下面开始分析一下这个脚本的诞生过程:

写脚本,首先要了解业务流程,了解工作流程。找出其中可以利用技术自动化的操作部分,从而提高效率,避免重复,无意义的工作。浪费时间就是浪费生命。

工作流程:

打开一个包含很多客户的Excel,打开国税网站,复制excel的帐号和密码,点击验证,点击同意,点击登录进入系统,在登录后的首页截图,命名为公司名,保存到文件夹里.退出,重复以上操作.

下面这张是深圳国税登录入口

需求分析:

首先:我们可以通过技术手段,将复制账号密码这一步简化.通过Excel手段我们可以将账号和密码合成一列,这一列的数据格式就是

https://github.com/login?name=1&pwd=2 网站地址+参数账户名+参数密码,接着,针对这个页面我们写个脚本,提取出url中的账户名和密码,自动填写到表单里,然后将同意的单选框选中.

然后:在某个固定的页面,通过技术手段注入一个按钮,点击这个按钮,对页面某区域进行截图,并自动命名归档,保存命名规则为页面上的某个显示的字段,其实就是公司名.

这部分的分析很重要,直接决定你脚本有几个函数,使用那些技术,数据流如何流转的。

 

设计思路:

1:制作一个chrome的插件,调取浏览器提供的api,自动截图,命名保存到本地

2:编写Tampermonkey 脚本,在页面注入一个按钮,并为按钮添加点击事件

前一种方式技术难度高,操作复杂,故后续尝试,首选的是第二种编写一个js脚本

脚本的编写主要依据需求分析,主要二个功能,一是根据url自动填写账号密码 二是点击注入的按钮命名保存截图

以下是脚本源码,经过一番修改,将国税系统改为github

引入了二个库 jquery 和 html2canvas 

jquery操作dom 

heml2canvas 将dom节点生成canvas,

源码编写:


  
  1. // ==UserScript==
  2. // @name 魔法按钮
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.1
  5. // @description try to take over the world!
  6. // @author Fizz
  7. // @match https://github.com/*
  8. // @require https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js
  9. // @require https://cdn.staticfile.org/html2canvas/0.5.0-beta4/html2canvas.min.js
  10. // @grant none
  11. // ==/UserScript==
  12. (function () {
  13. 'use strict'
  14. // 获取url中参数
  15. function getQueryString (name) {
  16. var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i')
  17. var r = window.location.search.substr(1).match(reg)
  18. if (r != null) return unescape(r[2])
  19. return null
  20. }
  21. // 提取url账号密码,自动填写表单,选中单选按钮
  22. if (location.href.indexOf('https://github.com/login') > -1 && location.search) {
  23. let name = getQueryString('name')
  24. let pwd = getQueryString('pwd')
  25. $('#login_field').val(name)
  26. $('#password').val(pwd)
  27. // $('[type=radio]').eq(0).attr('checked',true)
  28. }
  29. // 点击魔法按钮
  30. function clickMagicBtn () {
  31. html2canvas($('body'), {
  32. onrendered: function (canvas) {
  33. var dataURL = canvas.toDataURL('image/png')
  34. const fixtype = (type) => {
  35. type = type.toLocaleLowerCase().replace(/jpg/i, 'jpeg')
  36. const r = type.match(/png|jpeg|bmp|gif/)[0]
  37. return 'image/' + r
  38. }
  39. dataURL = dataURL.replace(fixtype('png'), 'image/octet-stream')
  40. // 将图片保存本地
  41. const saveFile = (data, filename) => {
  42. const link = document.createElement('a')
  43. link.href = data
  44. link.download = filename
  45. const event = document.createEvent('MouseEvents')
  46. event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null)
  47. link.dispatchEvent(event)
  48. }
  49. const filename = $('title').text() + '.png' // 文件名提取方法
  50. saveFile(dataURL, filename)
  51. },
  52. width: 320,
  53. height: 400
  54. })
  55. }
  56. // 注入魔法按钮
  57. var btnStyle = `position: fixed;
  58. bottom: 20px;
  59. right: 20px;
  60. color: #fff;
  61. background-color: #0084ff;
  62. border: 1px solid #0084ff;
  63. border-radius: 4px;
  64. padding: 5px 10px;` // 按钮样式
  65. var button = $(`<button style="${btnStyle}">魔法按钮</button>`)
  66. button.on('click', clickMagicBtn)
  67. $('body').append(button)
  68. })()

效果图:

 

 

学到的东西:

  1. 熟悉了TamperMonkery插件的使用,
  2. 复习了jquery和html2cavan库的api使用
  3. 对编程和生活有了更深的思考,你的技术不应该是仅仅为了满足老板的那个产品。你应该学以致用,造福广大人民,解救那些还整天坐着重复无意义工作的人们,让人们有更多的时间陪家人,陪孩子。
  4.  降低女朋友工作时间,提供工作效率,有助于家庭和谐幸福。(猝不及防的撒把狗粮。。。)

 

结束语:

编程让生活更美好,节省你的时间. 短短的几十行代码,就能把工作效率提高三本。这就是编程的魅力。这就是神奇的魔法。

试问一下你的工作技能除了给你带来薪资以外,对你的生活还有什么用处?

有兴趣的同学可以联系我,一起探讨一下脚本的世界。  try to take over the world !

有需要脚本定制的可以商业合作。谢谢

文章来源: fizzz.blog.csdn.net,作者:拿我格子衫来,版权归原作者所有,如需转载,请联系作者。

原文链接:fizzz.blog.csdn.net/article/details/82691856

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。