亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1954 | 回復(fù): 0
打印 上一主題 下一主題

技術(shù):python實現(xiàn)搶qq奧運火炬[僅供學(xué)習(xí)] [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2008-03-28 15:13 |只看該作者 |倒序瀏覽

                [聲明:僅供學(xué)習(xí)探討之用,對于使用本文代碼所造成之影響,本文作者不負(fù)任何法律和連帶責(zé)任]
最近,看到qq上不少好友的頭像前都有個小火炬,自己也想要一個,遂行..
結(jié)果發(fā)現(xiàn),需要登陸網(wǎng)頁 http://huoju.icoke.qq.com/ 去自己‘搶’火炬去,而且我試驗多次,也沒辦法搶到,只有靠‘機器’來搶了....
言歸正傳,經(jīng)過分析,如果想搶到火炬,需要激發(fā)網(wǎng)頁上的‘立即爭奪’按鈕,獲取網(wǎng)頁代碼:
               
               
                ##按鈕部分代碼
tr>
td height="67" align="center">a id="rob" href="#" onclick="return rob_torch();"> ... /td>
/tr>
由此可知,如函數(shù)rob_torch()有關(guān),下載此網(wǎng)頁相關(guān)的javascript(JS)代碼,找出rob_torch()函數(shù)如下所示:
function rob_torch()
{
    if (Cookie.getCookie("tobtorchcookie") == null)
    {
        var ntime = new Date();
        var stime = new Date(ntime.getYear(), ntime.getMonth(), ntime.getDate(), ntime.getHours(), ntime.getMinutes(), ntime.getSeconds()+25);
        Cookie.setCookie("tobtorchcookie", "ok", stime);
    }
    else
    {
        alert("抱歉,您的操作過于頻繁,請于25秒后重試。");
        return false;
    }
    if (arrDelay.num == 0)
    {
        alert("目前沒有活動資格可供爭奪,請耐心等候!");
        return false;
    }
    var vers = getQQVersion();
    if (vers == -1)
    {
        return false;
    }
    if (vers  1777 || vers >= 2007)
    {
        alert("您當(dāng)前的版本不支持活動資格爭奪,請到http://im.qq.com下載安裝官方2007II正式版或2008賀歲版QQ客戶端。");
        return false;
    }        
    JsonLoader.load('http://app.icoke.qq.com/icoke/torchdelay.php?'+Math.random(),function()
        {
            if (typeof(numJson) != undefined)
            {
                var url = "tencent://LargeSizedActivity/?HandleID=3&PUIN=&TorchUIN="+numJson[1];
                $("rob").href = url;
                window.open(url, "robtorchiframe", "location=no");
                return true;
            }
            else
            {
                ;
            }
    });
    return false;
}
其中大部分都是驗證,不是很重要,我們注意到JsonLoader.load這個函數(shù)調(diào)用,其中有兩個參數(shù),一個是原url地址,另一個是回調(diào)函數(shù)內(nèi)容,我們先看到這個回調(diào)函數(shù)會調(diào)用url地址‘tencent://LargeSizedActivity/?HandleID=3&PUIN=&TorchUIN=XXX’其中XXX經(jīng)過后來分析,是一個號碼,火炬號碼,$("rob").href = url;講網(wǎng)頁中的變量rob賦值為這個剛剛生成的url地址,然后由window.open()來調(diào)用這個鏈接,后來分析這個tencent協(xié)議需要調(diào)用一個qq客戶端程序,暫時不知,由這個客戶端程序去處理url地址請求。再返回來查看JsonLoad對象的load函數(shù),代碼如下:
var JsonLoader = {
    load: function(sUrl, fCallback)
    {
        var _script = document.createElement("script");
        _script.setAttribute("type", "text/javascript");
        _script.setAttribute("src", sUrl);
        document.getElementsByTagName("head")[0].appendChild(_script);
        if (!!document.all)
        {
            _script.onreadystatechange = function()
            {
                if (this.readyState=="loaded" || this.readyState=="complete")
                {
                    fCallback();
                }
            };
        }
        else
        {
            _script.onload = function()
            {
                fCallback();
            };
        }
    },
.............
這個,我們截取了一部分,其主要意思是根據(jù)情況,調(diào)用load的第二個參數(shù),回調(diào)函數(shù)。
這樣,我們就知道了,我們只需要激發(fā)這個tencent的協(xié)議調(diào)用就可以激發(fā)按鈕事件了....
現(xiàn)在的問題就是我們?nèi)绾稳カ@得上文中的XXX,即火炬號碼,由上述代碼rob_torch()函數(shù)中的url = "tencent://LargeSizedActivity/?HandleID=3&PUIN=&TorchUIN="+numJson[1],我們發(fā)現(xiàn),這個XXX變量numjSon[1]同函數(shù)delay_refresh()中的arrDelay.delayqq的值是一樣的,所以我們就直接每次通過調(diào)用delay_refresh()函數(shù)來更新獲得當(dāng)前放出來的火炬的延遲編號。function delay_refresh()
{
    var url = 'http://huoju.icoke.qq.com/huojuicoke/datajs/torch_delay2.js?'+Math.random();
    AsynLoader.load(url,  
             {     
                method:'get',     
                onSuccess: function(xmlHttp)
                {      
                    arrDelay = eval("(" + xmlHttp.responseText + ")");
                    $("torch_num").innerHTML = arrDelay.num;
                    if ($("torch_total") != null)
                    {
                        $("torch_total").innerHTML = formatNum(arrDelay.total_count);
                    }
                    var url = "tencent://LargeSizedActivity/?HandleID=3&PUIN=&TorchUIN="+arrDelay.delayqq;
                    $("rob").href = url;
                },     
                onFailure: function()
                {  }   
    });
后面進(jìn)一步分析得知,此頁面每隔一定時間調(diào)用這個fresh函數(shù)去刷新獲取當(dāng)前釋放出來的火炬編號,一段時間只釋放一個編號,我們可以頻繁調(diào)用這個刷新函數(shù),然后在這個火炬被釋放的第一時間,獲取這個火炬的編號,然后調(diào)用tencent協(xié)議url請求去獲取獲取,這樣,一旦有火炬被釋放出來,就可以很快的去'搶',比自己用手去點要快多了,本代碼沒有考慮異常情況,而且實現(xiàn)也不是很完善....不想繼續(xù)完善了,因為本來是用于分析和學(xué)習(xí),所以沒必要繼續(xù)了....
經(jīng)過測試,機器就是比人快...哈哈,以下是python實現(xiàn)的而代碼,再次提醒,對于代碼造成的任何影響,本作者不附帶任何責(zé)任。import urllib,webbrowser,time
import random
import re
regx = re.compile('\"[0-9]*\"') #分析獲取火炬編號的模式
#用于記錄原來的火炬編號,如果兩次獲取的火炬編號一致,則不激發(fā)獲取火炬的事件
old=''
num=999   #試驗999次
fresh_url='http://huoju.icoke.qq.com/huojuicoke/datajs/torch_delay2.js?'
get_url='tencent://LargeSizedActivity/?HandleID=3&PUIN=&TorchUIN='
while num-- = 0:
    net=urllib.urlopen(fresh_url) #刷新釋放的火炬
    data=net.read()
    m_list=re.findall(regx,data) #獲取火炬編號
    if old != m_list[0]:
        webbrowser.open(get_url + str(m_list[0]))  #激發(fā)獲取火炬事件
    time.sleep(1) #stop 1 second
               
               

本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u/19651/showart_510701.html
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP