实现自动登录

如何实现自动登录

​ 实现自动登录有很多方式,例如:可以使用python的selenium库模拟(不会写而且需要经常更新谷歌webdriver的插件,而且还可以被检测到,当然这些问题应该都能解决,但是我不会,而且别人曾经这么写的我当然应该换个方式),还可以使用C++通过CEF嵌入google浏览器实现(我最熟悉的语言所以也是最想实现的方式,但是本地编译出问题了解决不了,好难过,C++编译还是挺恶心的,涉及VS版本问题,window平台问题,还有程序版本,反正解决不了有点小沮丧,but生活还得继续啊,不能在一棵树上吊死),应该还有其它方法,但是恕我无知。web网页的本质应该就是本地的客户端获取服务器的资源显示运行了一堆的xml、css和js。所以我觉得使用js应该很容易实现(以前了解一点点js)。

1. 在油猴下创建自定义脚本

​因为贫穷让我偶然的机会知道了油猴,它里面的插件可以免费观看全网会员内容。理论上在公司用不到它,直到有一天需要下载百度云里的设备镜像。油猴的插件很好很强大,可以实现4线程下载(需要借助IDM)。这两个脚本让我感叹js还是很强大的(尤其是nodejs的出现,让他不在局限于浏览器上),我那时候就想什么时候我可以写一个自己的脚本。终于自动登录这个需求让我有了这个机会。

​ 只需要在tampermonkey点击下图的+按钮即可

实现自动登录_第1张图片

​ 然后就出现了js的编辑页面:

实现自动登录_第2张图片

“// @match https://www.codeproject.com ”这个标签下是你需要启动脚本的网站(匹配方式没研究,我的需求就是指定网站就可以例如// @match http://www.1234.com/*)

​ 然后就可以在“ // Your code here…”下面写你的js代码了。

2. 实现简单而又麻烦的操作

使用document.getElementsByClassName和document.getElementById等接口可以轻松实现自动填充用户名和密码。

我要登录的网站需要移动滑块验证,一般网站都是需要先点击然后会出现两个图片,一个大图一个小图,移动小图和大图边缘重合即可验证通过。有的网站可以直接就登录了,有的可能还想要点击登录下。这些的关键就在于移动距离。这个移动距离在js层面应该很难实现。在网上多数都是通过opencv实现的使用边缘检测(findContours)或者是模板匹配函数(matchTemplate)。但是我要用的网站测试效果一般(我对这些函数研究的不深,因为涉及到的数学知识超出我的能力了,还有就是我这验证网站做了两个相似小图的干扰而且有的图片背景很相似)通过对小图和背景图的观察,我发现正确的小图边缘三个点坐标关系是固定的,所以只需要遍历大图的像素点,找到最左边的边缘坐标,然后在计算对应其它两个坐标点是白色(RGB是255,255,255)即可。理论上用C++和python都可以实现上述功能,考虑到使用opencv的简便性和做web服务的容易性理所当然选择了python(虽然我不会python)。

​ 上诉步骤中模拟鼠标按下和移动以及鼠标抬起使用了js中的MouseEvent。

​ 实现base64转换使用了js中canvas

​ 实现web服用使用了python里的django框架。

​ 图片像素计算使用了PIL

​ 主要流程如下:

js自动填充用户名和密码
js点击获取图片
js将获取的大图转成base64发送给web服务
django将base64转成image
django通过PIL遍历像素查找移动边缘返回给js
js移动滑块距离为获取的移动边缘+固定偏移
js点击登录按钮
js判断url变化模拟打卡按钮

3. 是时候展现真正的技术了

​使用django启动web服务,将控制台输入参数作为调用的分钟和秒,使用C++调用chrome打开指定网页,tampermonkey会自动调用我们写的js脚本。这一些列操作对于我来说使用意义不大。但是我觉得我能完成,即使对js和python都不熟悉,即使遇到了一些障碍,还是坚持完成了。直到测试成功的时候感觉到,成功的快乐远大于程序的价值。这就是所谓的成就感。此时此刻想起来锐雯开大招的一瞬间,断剑重铸之日,骑士归来之时。哈哈。

你可能感兴趣的:(python,django,javascript)