2010-03-11 54 views
3

我正在寫一個perl程序,它正在執行一個簡單的get命令來檢索結果並處理它們。但該網站已更新,現在有一個處理結果的Java組件(因此實際數據不在源代碼中)。Perl如何與ajax形式交互

這是網站: http://wro.westchesterclerk.com/legalsearch.aspx

嘗試把在:
索引編號:11103
年份:2009

我希望能夠親語法進入 「指數」 和「年「,在表單底部顯示」按編號搜索「,然後檢索其旁邊列出的結果。

我已經用Perl編寫了許多程序,只需通過URL傳遞變量,結果列在源代碼中,因此很容易解析。 (使用LWP:簡單)

像:

$html = get("http://www.url.com?id=$somenum&year=$someyear") 

但是,這是完全新的給我,我不知道從哪裏開始。 我對LWP:UserAgent和Mechanize有點熟悉。

我非常感謝任何幫助。

謝謝!

+0

你的意思是Java或Javascript? http://www.sislands.com/coin70/week1/javajs.htm提示:AJAX中的J並不意味着Java。 – daotoad 2010-03-12 16:02:15

+0

好問題!我有點尷尬(特別是因爲我有CS學位),但我不知道。我做了一個(可能是愚蠢的)假設,它必須是ajax,因爲它只重繪頁面的一部分而不重新加載整個頁面。至少我知道A代表異步! – Jeff 2010-03-13 06:41:32

回答

2

使用其中一個驅動瀏覽器的模塊可能更符合邏輯。像Mozilla::Mechanize或Selenium工具。

瀏覽器最瞭解如何使用AJAX與服務器交互並重新渲染DOM等,因此在該能力之上構建腳本。

0

你要求在這個案例很難做。不是不可能,但很難。

方法A: 您可以通過他們的JavaScript代碼進行篩選。他們的「ajax」正在做的是向另一個網頁發送獲取/發佈請求並動態加載結果。如果你可以破譯那個鏈接和適當的參數,你可以繼續使用get。我會重申獲取螢火蟲插件和任何其他工具,可以幫助您解除對他們的JavaScript的混淆。

另一種方法: 如果你的程序可以訪問一個web瀏覽器(帶有javascript url支持,就像firefox)。您可以通過編程去查看這些地址,然後等待一會兒並獲取數據。

http://wro.westchesterclerk.com/legalsearch.aspx 
javascript: function go() { document.getElementById('ctl00_tbSearchArea__ctl1_cphLegalSearch_splMain_tmpl0_tbLegalSearchType__ctl0_txtInde xNo').value=11109; document.getElementById('ctl00_tbSearchArea__ctl1_cphLegalSearch_splMain_tmpl0_tbLegalSearchType__ctl0_txtYear').value='09';searchClick();} go(); 

這是我們與mozembed一起使用的方法,以編程方式解決這個問題。最近我們切換到Web Kit。並從佔用我們使用的Xvfb/Xvnc的創建虛擬桌面加載瀏覽器中的視頻顯示刪除此。


這些都是我跟到目前爲止想出的方法。如果你想出另一個,請告訴我。我也希望我能幫上忙。

3

這類問題被問了很多。標準答案是Wireshark

我剛剛在該網站上使用它提供了測試數據,並提取了一個負責任的POST請求。這可以讓你完全繞過Javascript。

+0

不錯。我必須嘗試。 – 2010-03-12 15:54:18

+1

http://stackoverflow.com/questions/2118415運行捕獲,通過HTTP過濾,選擇請求,從上下文菜單中選擇Follow TCP Stream。 – daxim 2010-03-12 17:18:45