最近在很不务正业的玩Python

理由是单位里的机械劳动

我这个人是最讨厌机械劳动的,特别是大批量重复的无意义的机械劳动

这个劳动很简单,也就是把之前已经被确认删除的再次确认一遍,这个本来是用来针对其他厅局的一个审查办法,但是毫无疑问,针对被自己人删除过了的东西这样的重复审核毫无意义,但是每次都要让我多费好多时间来做这个事情.

最初是采用最简单最为原始的办法.那就是下个按键精灵,然后用按键精灵做个脚本出来.

这个脚本也经历了好多次变革,从最初的依赖于鼠标,到后来全键盘操作减低误操作的可能性.到最新的一版可以自动检测屏幕区域颜色用以确定页面是否已经正常载入.

但是无论这个程序写的多么的美妙,这个毕竟还是基于IE的,毕竟还是在不同分辨率的显示器上缺乏可移植性,甚至IE的版本不同都需要我再写一遍.同时,它不具备判定是否是我们本局所判定为删除的这样一个逻辑判断机制,导致最后可能会产生误操作.

所以我想到了用Python写个直接HTTP判断并且提交的,这样直接分析HTML或者正则表达式来解析网页文件,剥开我所想要的文件就可以了.

但是不得不说,我是个连Python的门都没有怎么入过的家伙.用的面向对象的程序仅限于一点点皮毛的PHP,以及一点点的JavaScript而已..于是赶鸭子上架的就开始写这个程序了.

要求很简单,不一定需要GUI,Python本身保证了可移植性,所以这点也不用担心,我所需要做的只有三个东西,1.登录.2,用正则表达式找到需要程序处理的部分.3.提交删除.

但是就这简单的三个东西,我琢磨了三天了...最初我卡在了该使用什么类上的问题,Python的HTTP请求类有很多,有原始的urllib,也有更新版本的urllib2,也有HTTP类,这样就迷糊了...不过最终发现,没有必要使用太多的类,直接使用urllib2就完全可以搞定了

之后我卡在了Session方面(至少我自认为是卡在Session了,其实则不是),虽然我登录了,但是我却一直无法得到列表页面...后来发现因为网站是Java写的,它每次都要你一定要在页面链接中传递一个Session值,而我则没有把这个值带入到我所指向的链接中,导致我每次登陆都无效.这个其实很好处理,只需要在登录了之后,处理登录之后的连接提取Session值,然后每次用分号加参数名带入进去就行了.

最后就是正则表达式的写法,这个和JavaScript以及PHP的正则表达写法都完全不同,甚至在正则表达式的语法上都有一定的变化,但是总归就是那么一点点小的改动而已,接受起来并不难..但是难就难在了Python的正则表达式都是贪婪匹配的...这样就导致我怎么也无法找到对应的ID号码,因为可以它找到了第一个ID,而把提交的用户名匹配到了最后一行.毕竟一个页面是有很多行的...虽然网站上提示使用HTML类,但是我觉得花那个时间再去研究HTML解析类无疑是没有必要的,而且HTML解析类绝对不会有比正则更高效的速度,毕竟HTML需要解析整个文件,而我只需要提取部分.

后来用个很简单的办法解决了,那就是限定.字符匹配的次数,因为标题的字数是限定死了的,而内文中的文字纯HTML接近1000个字符,很明显没有哪个标题能够有这么长,所以将字数限制在了1200左右,这样就不会导致跨行去取ID值了...

现在最后的问题就是一个了..那就是提交,我现在面临的问题就是无论如何提交总是报告我一个错误,告诉我对应的帖子不存在...这才真是比较见鬼的状况,因为登录的时候我也是照葫芦画瓢就能成功的(因为都是用的POST方法),我甚至把这个网页放到PHP中去分析它到底提交了哪些POST变量,发现了除了一些空变量之外,其他的重要的变量我都提交了,但是结果就是怎么也无法提交上去.

嗯,于是现在需要重新分析这个该死的页面了....看看哪里出了问题..只要这个解决了,剩下的只要稍稍改动,它就可以很轻松的开始遍历页面,然后一行行的帮我把重复的劳动给解决掉了...

嗯~创意,来源于偷懒.

评论

此博客中的热门博文

远程记录OpenWRT日志

用OpenWRT打造自动翻墙路由器(详解篇)

Python中为什么要用is None来代替== None?