您的位置:首页 > 其它

用AutoIt写网页外挂系列之 开心网的X世界网页游戏自动送免费礼物

2011-01-29 17:35 239 查看
外挂是个不错的东西, 它可以将你从重复和无聊的点击中解放出来,帮助你更快的升级, 本文主要是针对开心网的X世界做的一个开发外挂教程。这个外挂的功能非常简单,主要用来自动发送“急救包”给你的好友,开发这个外挂用到技术包括AutoIt和jQuery, 如果你有这2方面的经验,应该能更好的理解以下的内容。

首先, 你要先登录开心网。然后,转到免费礼物页面: “http://www.kaixin001.com/!spiderman/gift.php”。点击右键->“查看源代码”,在打开的窗口中搜索“急救包”, 我们注意到“急救包”所在的div块, 它的id属性是“free_Nlkuai_Inv”:





我们知道如果要发送一个免费礼品给好友,必须先点一个“送给好友”图标 ,一般位于小窗口的底部。在源代码的“急救包”下面第2行,大家能看到一个”a”标签,它的title属性正好就是“送给好友”, 这一行就是我们要找的点击图标。 我们可以看到它的class属性值为”sr_butt”,那么, 我们在jQuery如何定位到这个元素呢? 其实很简单, 可以参考以下代码:

jQuery('#free_Nlkuai_Inv').find('.sr_butt')

我们的思路很简单, 利用AutoIt找到这个发送按钮节点,然后执行click事件。关于如何在AutoIt里使用JQuery,可以参考以前的文章“AutoIt结合JQuery开发教程”。打开AutoIt应用程序, 新建一个空白文件,主要代码如下:

Opt('MustDeclareVars', 1)
Opt("SendKeyDelay",250)

Local $objCOMError, $objAppIE, $jQuery
$objCOMError = ObjEvent("AutoIt.Error", "_COMErrorHandler")
;~ //创建IE对象
$objAppIE = ObjCreate("InternetExplorer.Application")
$objAppIE.visible = True

;~ //定义好友列表
Local $avArray[1]
$avArray[0] = "a";

;~ //入口方法
Main()

Func Main()
FOR $element IN $avArray
Sleep(1000)
if(StringLen ($element) <= 0) Then ContinueLoop
SendGift($objAppIE, $element)
Next
EndFunc

;~ //点击按钮,发送免费礼物
Func SendGift($objAppIE, $user)
Local $url = "http://www.kaixin001.com/!spiderman/gift.php"

$objAppIE.navigate($url)
$jQuery = _insertjQuery($objAppIE)
;~ //找到“救急包”,并执行click事件
$jQuery.jQuery('#free_Nlkuai_Inv').find('.sr_butt').get(0).click()
;~ //弹出窗口,定位到第一个文本框
$jQuery.jQuery('#gift_friend').get(0).focus()
;~ //执行click
$jQuery.jQuery('#gift_friend').get(0).click()
Sleep(1000)
;~ //输入好友名称
Send($user)
;~ //循环,直到好友名称返回

Local $Count = 0
Do
Sleep(1000)
$Count = $Count + 1
;~ //返回的值
Local $userName = $jQuery.jQuery('.sgt_on').get(0)
If(IsObj($userName) == 1) Then
ExitLoop
Else
;~ //如果没有返回名称,再次输入用户名
$jQuery.jQuery('#gift_friend').get(0).focus()
$jQuery.jQuery('#gift_friend').get(0).click()
Send($user)
EndIf
Until $Count == 5
;~ //无法找到该用户名称,返回
If($Count == 5) Then
Return
EndIf
;~ //返回的名称
Local $userName = $jQuery.jQuery('#f_suggest_0').get(0)
If(IsObj($userName) == 1) Then
Send("{ENTER}")
;~ //点击“赠送”图标
$jQuery.jQuery('.btn_con').find('.promote').get(0).click();
;~ //成功窗口
Local $Succ = $jQuery.jQuery('.xworld_popup').find('.popup_con > .promote').get(0)
If(IsObj($Succ) == 1) Then
Local $text = $Succ.innerText;
if("关闭" == $text) Then
$jQuery.jQuery('.popup_con').find('.promote').get(0).click()
EndIf
EndIf
Else
;~ //关闭窗口
$jQuery.jQuery('.btn_con').find('.promote').get(1).click()
EndIf

EndFunc

Func _insertjQuery($objAppIE)
Local $objWindow, $objHead, $objScript
_IEPageLoadWait($objAppIE)
$objWindow = $objAppIE.document.parentWindow
$objHead = $objAppIE.document.getElementsByTagName('head').item(0)
If Not(IsObj($objWindow.jQuery)) Then
$objScript = $objAppIE.document.createElement('script')
$objScript.type = 'text/javascript'
$objScript.defer = 'defer'
$objScript.text = FileRead(@ScriptDir & '\jquery-1.4.2.min.js')
$objHead.appendChild($objScript)

While Not(IsObj($objWindow.jQuery))
Sleep(100)
WEnd

$objWindow.jQuery.noConflict()
EndIf
Return $objWindow
EndFunc

Func _IEPageLoadWait($objAppIE)
Do
Sleep(100)
Until ($objAppIE.readyState = 'complete' Or $objAppIE.readyState = 4)
Do
Sleep(100)
Until ($objAppIE.document.readyState = 'complete' Or $objAppIE.document.readyState = 4)
EndFunc

Func _COMErrorHandler()
Switch $objCOMError.number
Case -2147352570
Return 0
Case Else
; Don't use central errorhandler
MsgBox(8240, "Automation Error", "Unhandled COM Automation Error." & @CRLF & @CRLF & _
"This operation resulted in an unhandled error." & @CRLF & @CRLF & _
"Technical Information: " & @CRLF & _
"Error Number: " & $objCOMError.number & @CRLF & _
"Error Description: " & $objCOMError.winDescription & @CRLF & _
"Line Number: " & $objCOMError.scriptLine & @CRLF & @CRLF & _
"Contact technical support for furthur help.")
Exit
EndSwitch
EndFunc

源代码示例:http://files.cnblogs.com/zhaojin/kaixin_training.rar
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐