2015-06-14 37 views
2

我正在使用Java。啓用javascript的網頁上的自動web任務,使用Java

基本上我想要實現的是能夠在網絡上運行自動化任務。例如,登錄到網站,做那裏的東西,填寫表格,註銷等。

我已經設法這樣做(登錄併發送評論)在簡單的網站上沒有JavaScript代碼存在(只有html,html表單),通過使用HttpURLConnection類發送基本的POST和GET消息。

問題是我碰到一個網站,它使用javascript代碼生成會話cookie(在客戶端)。所以會發生的是,當你訪問這個網站時,JavaScript代碼會在瀏覽器中執行,生成會話cookie。這些cookie隨每個請求一起發送,沒有它們,該網站就不會起作用。 (這是這個網站http://www.jofogas.hu/

我不能得到這些餅乾,因爲我不知道如何找出什麼樣的Javascript代碼得到執行,我不知道如何在Java中運行JavaScript代碼,然後使用結果該代碼。

+0

從他們的JavaScript你可以找到'setNewSessionCookie',看它是基於vid cookie的。我讓你做一個不復雜的逆向工程。您應該請求獲得編寫腳本的權限。 – Cyrbil

+0

@cyrbil你是如何得出這個結論的?您是否使用Chrome調試器工具? – wintergrascph

回答

2

要回答如何:

首先我看到set-cookie頭部沒有設置名爲ses任何cookie,並此cookie奇蹟般地出現。您知道,在JavaScript中,要設置一個cookie,請撥打document.cookie。於是我抓住源代碼,自動縮進它,然​​後搜索document.cookie。您可以輕鬆地登錄到setNewSessionCookie,您可以看到它創建了一個名爲ses的cookie。

function setNewSessionCookie() { 
    var b = get_vid(); 
    var d; 
    var e; 
    var a; 
    var c = new Date(); 
    c.setTime(c.getTime()); 
    a = getCookie("ses"); 
    if (!a) { 
     b = get_vid(); 
     if (!b) { 
      return 
     } 
     d = (new Date()).getTime(); 
     a = b + "_" + d 
    } 
    e = new Date(c.getTime() + (1000 * 60 * 15)); 
    document.cookie = name + "ses=" + a + ";expires=" + e.toGMTString() 
} 

此Cookie設置與由get_vid()設置可變a的值。

function get_vid() { 
    var b; 
    var a = getCookie("vsid"); 
    if (!a) { 
     return false 
    } 
    if (a.search(",") == "-1") { 
     b = Base64.decode(a) 
    } else { 
     b = a 
    } 
    return b.split(",")[0] 
} 

TL; DR:此功能得到vsid餅乾(這是由set-cookie頭髮送),解碼的base64它,昏迷前返回的部分。接下來,ses cookie將通過附加"_" + (new Date()).getTime()

在我的情況下創建:

getCookie("vsid") // "ODk5NjEwMzEsMTQzNDMwNDM4Ng==" 
Base64.decode(getCookie("vsid")) // "89961031,1434304386" 
getCookie("ses") // "89961031_1434304048406" 

我警告你在網頁拆解法律問題,也可能是對使用的網站的條款(這是不以任何語言我說 ...)。

編輯:對於這樣的問題:

上啓用JavaScript的網頁自動webtasks,使用Java

您可以在Selenium Project被interessed及其java driver