找回密码
 加入
搜索
查看: 5058|回复: 25

[原创] (UDF法)写了一个ACN论坛(本论坛)的自动登录软件

[复制链接]
发表于 2017-1-20 14:59:16 | 显示全部楼层 |阅读模式
本帖最后由 夏威夷之夜 于 2017-1-26 12:41 编辑

原先写了一个ACN论坛(本论坛)的自动登录软件,采用的是UDF法,非POST法。但在朋友@帆船的提示下注意到了,ACN的登录帐号类型应当有三种,分别为用户名,UID以及邮箱。这三个选项原先是没有加在我的这个软件里的,只是默认登录类型为用户名。
采用UDF法写代码的目前遇到了一个过去不去的坎,原本想删帖了,但是好像删不掉,于是索性将问题与原始代码以及原文件包一并打包上传,望借助众坛友之力解决这个问题。
问题描述:无法指定下拉列表的值,即无法设置选择用户名、UID还是邮箱的登录帐号类型。
问题经过及详细描述:
首先通过浏览器的开发人员模式定位至下拉菜单所对应的网页代码部分,发现对应的select下面只有一个option,并且值为用户名,这是默认情况下的。

而在手动修改选中下拉列表中UID或者邮箱选项后,发现select的option值会相应的更改为uid或者email,这里值得注意的一点是,常规网页的下拉列表所对应的网页源码部分,有几个选项就会有几个option,但是ACN论坛的源码里只有一个option(这里说明一点,本人没有学习过html,因此有关html的编程不是很理解)。因此我曾尝试过使用_IEFormElementOptionSelect()以及直接通过对该option的值进行复制,发现均不能改变option的值。研究网页源码发现该表单调用js脚本来处理下拉列表,这是所调用的函数名称(单引号之中是表单对象的id)simulateSelect('loginfield')。即使知道了这些仍无法做到修改option的值。
在压缩包中含有上述的js文件。
这边补充一点,回复问题的坛友注意,我已经知道可以使用post发来解决登录的问题,这边我们只讨论研究UDF法登录,因此有关建议使用POST登录的回复就不要出现了。
下面是软件修改前的主界面:

这是修改后的主界面:

下面是GIF演示动画:

下面是源文件下载链接:
注意!!!下载以后请勿直接运行,先将代码中安装文件的路径进行修改后再运行,否则会报错。


下面分析一下POST登录与纯UDF登录之间的区别:
总的来说,POST法登录网站与UDF法登录网站各有优缺点。从技术角度分析,POST所要求的技术是比较高级的,要实现POST登录,首先要通过抓包对整个登录过程进行一个比较详尽的分析,找出从客户端与服务器交换数据之中的一些关键包,从中提取关键信息。这里面最重要的是一点是要分析出POST数据的结构,有些网站的POST数据比较简单,简单到里面可能只需要原始的用户名和密码两个信息就可以,也有些网站的POST数据就比较复杂,组成部分可能会包含URL编码后的用户名、加密处理后的密码字符串、登录类型、验证码等等,可能有人觉得简单的跟复杂的之间好像也没差多少,实际从代码实现角度上来说就差的远了,那这里仅讨论一下POST DATA部分数据的处理,上面简单的情况下,只需要将原始POST DATA数据取出来,结构是固定的,换用不同帐号登录只需要相应的填上原始用户名和密码的字符串即可。但是复杂情况下,原始的用户名(比如包含了中文字符)和密码的处理就不是一个简单的事情,比如一个用户名,首先要进行判断是否含有不可直接发送的字符串,如果含有则要对其进行转码,而转码本身也不一定是一件简单的事情,不同的网站对编码有不同的要求,比如UTF-8,GB2312等,那在AU3里要进行转码就需要花点功夫了。第二,要对密码字符串加密,那么首先要从网页源码下手分析定位到加密用的函数、函数所在的脚本,然后再在AU3中调用加密脚本对密码进行加密,这个本身也是一个比较复杂的过程,不过好在坛友里有人专门搞了一个运行JS脚本的UDF,这样也能省去不少力,POST在操作网页上几乎无所不能,只要能够抓包分析出来就好,但是如果所有操作都用POST的话,那应当是相当繁琐的一件事情。
那么纯UDF来登录操作网页的话,单纯的从代码实现角度来说,相比POST要来的简单的多,也比较容易理解,对于一个网页填表登录等等操作,如果能够纯UDF化,那整个流程就跟写个普通脚本那样来的简便,而实际上也确实非常像模拟键鼠操作网页,但是又比键鼠来的更加精准与可靠,如果是模拟键鼠,那么还要考虑网页是否加在完全,该有的元素是否出来,窗口的大小,网页内滚动条的滚动等,而UDF完全不需要考虑这些,因为UDF本质上是在操作对象,对象又是明确的,那因此就具有了简单又可靠的特点。不过现有的UDF似乎也并不能够解决所有的网页操作相关问题,并且对于一些新手,以及对于那些对网页编程类不了解不熟悉的在UDF上也不是非常好下手。
因此分析两种方法操作网页的区别后,最主要想说明的一点是,对于具体问题,还是要有选择的去考虑该用何种方法,针对不同成本及目的去做出选择。

新手发表一点心得,嘿嘿嘿。

在这里非常感谢坛友"1361739590"提供的支持与帮助。另附上最终可正常运行的源码。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×

评分

参与人数 2金钱 +20 收起 理由
帆船 + 10 总结的很好嘛……
zpmc123 + 10 新年忆乐

查看全部评分

 楼主| 发表于 2017-2-1 10:46:23 | 显示全部楼层
回复 25# zpmc123


    Apowersoft
发表于 2017-1-31 11:19:34 | 显示全部楼层
回复 1# 夏威夷之夜


    楼主gif录制的是什么工具请说一下以后我们也能用到
发表于 2017-1-27 11:10:23 | 显示全部楼层
回复 20# heroxianf
POST登陆ACN的其实我已经做好了,还考虑到了论坛几个示例没有做好的地方,例如中文用户名的GBK转码,安全提问等。

但是有一个地方特别的尴尬:

如图,显示了正确的用户信息,但是提示未登录……之后就退出了……

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2017-1-26 23:42:50 | 显示全部楼层
UI挺不错的,值得赞
 楼主| 发表于 2017-1-26 20:32:39 | 显示全部楼层
回复 20# heroxianf


    其实UDF也可以变相的做到后台打开,那就是把原本里面这一行
Local $oIE=_IECreate("www.autoitx.com")
加上参数就可以了
Local $oIE=_IECreate("www.autoitx.com",0,0)
,这样那就可以看不到了,不过只是隐藏了窗口而已,实际上ie进程还是在的,不过你可以把进程结束的。
 楼主| 发表于 2017-1-26 20:26:35 | 显示全部楼层
回复 20# heroxianf

这是帆船最近用post登录百度的案例,你可以去看看的,里面讲解的很详细的
    http://www.autoitx.com/thread-54530-1-1.html
发表于 2017-1-26 17:30:03 | 显示全部楼层
回复 19# 夏威夷之夜

最近在折腾POST  希望后台打开那种。
 楼主| 发表于 2017-1-26 16:12:05 | 显示全部楼层
回复 18# heroxianf


   什么意思?你想要哪种方式打开?
发表于 2017-1-26 14:02:54 | 显示全部楼层
外部打开啊?
 楼主| 发表于 2017-1-26 12:27:13 | 显示全部楼层
回复 13# 1361739590


    成功了,运行正常了,非常感谢
发表于 2017-1-26 11:13:11 | 显示全部楼层
回复 15# 1361739590
非常感谢,修改成功并登陆了!
发表于 2017-1-26 11:06:12 | 显示全部楼层
回复 14# 帆船


    [] 换成 ()
发表于 2017-1-26 10:45:44 | 显示全部楼层
回复 13# 1361739590
$type的数组会报错啊……

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2017-1-26 09:44:29 | 显示全部楼层
本帖最后由 1361739590 于 2017-1-26 11:05 编辑

回复 12# 夏威夷之夜


之前没下附件,根据附件改了一下,试试看。
$type = $oIE.document.getElementsByTagName("option")
Case "用户名"
                $type(0).value = "username"; 登入用
                $oIE.document.getElementById("loginfield_ctrl").innerText="用户名"; 界面显示用
 Case "UID"
                $type(0).value="uid";  登入用
                $oIE.document.getElementById("loginfield_ctrl").innerText="UID"; 界面显示用
 Case "邮箱"
                $type(0).value="email"; 登入用
                $oIE.document.getElementById("loginfield_ctrl").innerText="Email"; 界面显示用
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-3-29 07:38 , Processed in 0.082242 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表