生活随笔
收集整理的這篇文章主要介紹了
用AutoIt写网页外挂系列之 开心网的X世界网页游戏自动送免费礼物
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
外掛是個(gè)不錯(cuò)的東西, 它可以將你從重復(fù)和無聊的點(diǎn)擊中解放出來,幫助你更快的升級(jí), 本文主要是針對(duì)開心網(wǎng)的X世界做的一個(gè)開發(fā)外掛教程。這個(gè)外掛的功能非常簡單,主要用來自動(dòng)發(fā)送“急救包”給你的好友,開發(fā)這個(gè)外掛用到技術(shù)包括AutoIt和jQuery, 如果你有這2方面的經(jīng)驗(yàn),應(yīng)該能更好的理解以下的內(nèi)容。
?
首先, 你要先登錄開心網(wǎng)。然后,轉(zhuǎn)到免費(fèi)禮物頁面: “http://www.kaixin001.com/!spiderman/gift.php”。點(diǎn)擊右鍵->“查看源代碼”,在打開的窗口中搜索“急救包”, 我們注意到“急救包”所在的div塊, 它的id屬性是“free_Nlkuai_Inv”:
我們知道如果要發(fā)送一個(gè)免費(fèi)禮品給好友,必須先點(diǎn)一個(gè)“送給好友”圖標(biāo) ,一般位于小窗口的底部。在源代碼的“急救包”下面第2行,大家能看到一個(gè)”a”標(biāo)簽,它的title屬性正好就是“送給好友”, 這一行就是我們要找的點(diǎn)擊圖標(biāo)。 我們可以看到它的class屬性值為”sr_butt”,那么, 我們在jQuery如何定位到這個(gè)元素呢? 其實(shí)很簡單, 可以參考以下代碼:
jQuery('#free_Nlkuai_Inv').find('.sr_butt')
?
我們的思路很簡單, 利用AutoIt找到這個(gè)發(fā)送按鈕節(jié)點(diǎn),然后執(zhí)行click事件。關(guān)于如何在AutoIt里使用JQuery,可以參考以前的文章“AutoIt結(jié)合JQuery開發(fā)教程”。打開AutoIt應(yīng)用程序, 新建一個(gè)空白文件,主要代碼如下:
Opt('MustDeclareVars', 1) Opt("SendKeyDelay",250)
Local $objCOMError, $objAppIE, $jQuery $objCOMError = ObjEvent("AutoIt.Error", "_COMErrorHandler") ;~ //創(chuàng)建IE對(duì)象 $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
;~ //點(diǎn)擊按鈕,發(fā)送免費(fèi)禮物 Func SendGift($objAppIE, $user) ??? Local $url = "http://www.kaixin001.com/!spiderman/gift.php"
??? $objAppIE.navigate($url) ??? $jQuery = _insertjQuery($objAppIE) ;~???? //找到“救急包”,并執(zhí)行click事件 ??? $jQuery.jQuery('#free_Nlkuai_Inv').find('.sr_butt').get(0).click() ;~??? //彈出窗口,定位到第一個(gè)文本框 ??? $jQuery.jQuery('#gift_friend').get(0).focus() ;~?? //執(zhí)行click ??? $jQuery.jQuery('#gift_friend').get(0).click() ??? Sleep(1000) ;~??? //輸入好友名稱 ??? Send($user) ;~??? //循環(huán),直到好友名稱返回
??? 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}") ;~??????? //點(diǎn)擊“贈(zèng)送”圖標(biāo) ??????? $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("關(guān)閉" == $text) Then ????????????? $jQuery.jQuery('.popup_con').find('.promote').get(0).click() ?????????? EndIf ??????? EndIf ??? Else ;~????????? //關(guān)閉窗口 ????????? $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
轉(zhuǎn)載于:https://www.cnblogs.com/zhaojin/archive/2011/01/29/1947555.html
總結(jié)
以上是生活随笔 為你收集整理的用AutoIt写网页外挂系列之 开心网的X世界网页游戏自动送免费礼物 的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔 推薦給好友。