外挂是个不错的东西, 它可以将你从重复和无聊的点击中解放出来,帮助你更快的升级, 本文主要是针对开心网的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
|
|
源代码示例:https://files.cnblogs.com/zhaojin/kaixin_training.rar