firef0x 发表于 2018-1-25 00:45

【原创】山东灯塔党建自动答题程序编写指南

本帖最后由 firef0x 于 2018-1-25 08:21 编辑

成品软件在此
https://www.52pojie.cn/thread-688246-1-1.html

对不起了各位,lz这段时间做了个小手术,现在刚能勉强用两个手使用手机打字,电脑是不要想了,护士MM不让用,所以沉默了好几天。
有让我公开源码的,但是源码在单位电脑上也拿不到,病假还有小半个月才回去,而且也答应某人做个教程的,只能言简意赅的说下思路。

【以下为给大众的声明】
首先程序原理是通过外挂的方式操作浏览器的HTML DOM对象,用的是nodes的.click方法,目前后端暂时无法区分这个.click是手动还是自动操作,而且我还专门把login和post留给你们自己提交,所以被封号的请找自身原因。

【以下为简单的指南性质的教程】
程序通过IE浏览器的类生成HTML DOM对象,大概有两种方法,一是取得IEFrame类hwnd,从而得到webbrowser对象,再从webbrowser.document得到HTML DOM接口指针;二是逐层取得ieframe的子类hwnd到
Internet Explorer_Server类,用其hwnd注册一个HTML DOM接口指针,我用的第二种。
这两种方法都必须注意只需要取得接口指针即可,不要实例化新对象。
以上一是用的EnumWindows API,二是用的FindWindows/EX API,示例代码多得很请自行度娘。
有了HTML DOM,就好办了,分析答题页面的代码(这个我用的chrome,比ie好用),找到其规律编写相应代码即可。
(关于HTML DOM模型请自行度娘,手机打字不便请见谅,一定要弄懂模型结构和nodes的意思。这个教程不错:http://www.w3school.com.cn/htmldom/index.asp)

啊啊啊啊啊,刚刚写了一大段浏览器一滑动就没有了,恢复回来的只到这。。。。我要疯!!!!

在本例中,既然是自动查找比对,那么就得知道网页上的字,其中题目用来查找,选项用来比对,这页面一次性讲题目载入完毕了的,给我们提供了不少便利。这些题目和答案就是某些nodes对象的innertext属性。

要获得nodes对象可以通过三种方法:tagname(getElementsByTagName),classname(getElementsByClassName)和id(getElementByID)。要注意tag和class返回的都是nodes对象集,可以用对应方法的.count查看数量,在方法语句末尾加(index)表示具体某序号的对象,id返回的是单一nodes对象。
在本例中使用tagname(li)或classname(具体名称忘了,在每个题目的td还是span里面,手机不好查,自己找找吧class=“xxxx”)可以返回所有的题目和选项nodes,我用的classname,返回结果中只有题目和答案,用tag li会有很多别的nodes。
声明HTML DOM对象htmldoc并赋值为ie的iHMTLDocument的指针

htmlNodes=htmldoc.body.getElementsByClassName(“不记得了你们自己看看”)
返回题目和选项5个一组,共20组
用for i = 0 to 19(共20个数)
或者是
for htmlNodes in each htmldoc.body.getElementsByClassName来逐个取得页面内容
利用nodes集的index mod 5 =0确定该nodes是题目还是选项
题目的文本strTitle=htmlNodes.innertext
选项的文本因为nodes结构需要处理,我记得是找父节点的最后(最前?)子节点,不然nodes type不是checkbox或者option就没有click事件,Answer=htmlNodes.parentNode.lastChild.innertext,
,然后这里就可以将题目文本去除空格在数据库中寻找了,
我用的mdb引擎,支持sql语句,简单好用。
“select * from test where question='”+strTitle+"'"
Fields(6)为答案,从fields(2-5)中取出答案文本(组)与answer逐个比对,对上了就htmlNodes.parentNode.lastChild.click
然后,程序跑完就答完。
所以,根据这个原理做的外挂是不会被封号的哈,大家看着时间手动提交就行。
渣教程,对于不会编程的来说简直无法阅读,水平有限,请见谅。

以上。

PS:论坛好像有规矩必须上图,我这在医院用手机打的简单文字版指南也没法上图啊,就这点点字还打了我接近三个小时。。。。来张某医疗器械的照片吧,做过手术的应该知道这是啥玩意。。。大家看我这么不容易这么敬业鼓励一下可好。。

firef0x 发表于 2018-3-8 14:57

xiaomayi2012 发表于 2018-2-27 11:18
求教楼主用python如何搞 给点思路 ,是用selenium 模拟点击吗?谢谢

是的,用selenium+webdriver
配置好webdriver插件,
web=webdriver.xx(IE,Chrome,Firefox)
web.get("http://xxjs.dtdjzx.gov.cn/")
根据需要编写自动登录过程脚本或者手动进入到答题页面,并根据文档DOM结构def对应的自动操作脚本并调用即可。
GetNodes= driver.find_elements_by_class_name("w_fz18")
判断GetNodes.text,是题干就查答案,是答案就对比
然后GetNodes.click
说起来简单做起来稍复杂,个人觉得不如VB方便。

firef0x 发表于 2018-1-25 08:18

psp7456 发表于 2018-1-25 07:38
数据库完全没必要用,直接用json搞定。

你可能不知道事情的来龙去脉,程序是用vb写的,无论拆json或者挂库都不如mdb来得方便
具体情况要具体分析呀,最开始想用python做的,后来觉得做这种小程序vb也有很大的优势,所有代码不到150行我记得

龙哥哥 发表于 2018-1-25 00:53

感谢楼主带病分享,祝楼主早日康复,为大家带来更多更好的分享!

理想呦 发表于 2018-1-25 01:10

谢谢楼主的分享,祝楼主早日康复!

b19341 发表于 2018-1-25 01:13

祝楼主早日康复!

waiwaiwq 发表于 2018-1-25 01:48

表示所有党员围在一起答题,每个人报问题,有个人负责找答案~~~很壮观

zoxoco 发表于 2018-1-25 02:01

谢谢分享

vickydd 发表于 2018-1-25 02:03

楼主好人,早日康复

shadan 发表于 2018-1-25 06:40

第一时间来学习了,教程对我来说难度还有点大,还要从基础学起啊,感谢楼主带病指导,早日康复。
先收藏了。

psp7456 发表于 2018-1-25 07:38

数据库完全没必要用,直接用json搞定。

hhhdhzm 发表于 2018-1-25 08:05

楼主分享精神可嘉!
页: [1] 2 3 4 5
查看完整版本: 【原创】山东灯塔党建自动答题程序编写指南