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

时间:2024-02-23 15:07:34

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

 

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

image

我们知道如果要发送一个免费礼品给好友,必须先点一个“送给好友”图标 ,一般位于小窗口的底部。在源代码的“急救包”下面第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

 

源代码示例:https://files.cnblogs.com/zhaojin/kaixin_training.rar