2012-01-13 10 views
0

機械化我將要訪問一些對亞馬遜的KDP賬戶 - http://kdp.amazon.com/不知道如何處理的JavaScript,在這種特定的實例

我的任務是登錄到每個帳戶,並檢查帳戶的收益。機械化非常適合登錄和處理cookie等,但顯示帳戶收入的頁面使用javascript來動態填充頁面。

我沒有挖一點點,發現Java腳本發出以下請求:

https://kdp.amazon.com/self-publishing/reports/transactionSummary?_=1326419839161&marketplaceID=ATVPDKIKX0DER 

隨着其包含會話ID,令牌和一些隨機的東西的cookie。每次點擊鏈接顯示結果時,上述GET url的數字部分都是不同的,即使它是相同的鏈接。

爲了響應該請求,然後瀏覽器接收到這個(切出一束它,所以它不會佔用整個頁面):

{"iTotalDisplayRecords":13,"iTotalRecords":13,"aaData":[["12/03/2011","<span 
title=\"Booktitle\">Hold That ...<\/span>","<span 
title=\"Author\">Amy 

.... 

<\/span>","B004PGMHEM","1","1","0","70%","4.47","0.06","4.47","0.01","0.00",""],["","","","","","","","","","","","","<div 
class='grandtotal'>Total: $ 39.53<\/div>","Junk"]]} 

我認爲我可以使用機械化的cookie容器提取作爲該請求一部分的cookies,但是如何確定該數字是什麼以及它是如何生成的?在最好的日子裏,頁面源代碼中的JavaScript似乎很神祕。這裏是其中的一個:

http://kdp.amazon.com/DTPUIFramework/js/all-signin-thin.js

有沒有辦法真正追查的JavaScript正在運行的「幕後」後,我的東西點擊頁面上,這樣我可以仿效這一要求可以這麼說與機械化結合?

丹科..

PS:我不能(或者說,我不希望)使用的Watir這個任務,因爲在理論上我可能會處理不僅僅是一個賬戶的少數這麼多這一定是相當活潑的。

回答

1

這只是一個時間戳,它只用於緩存清除。試試這個:

Time.now.to_i.to_s 
+0

只是幾乎沒有想通了。你是一個非常聰明的人:) – 2012-01-13 23:48:34

+0

什麼是緩存清除? – 2012-01-13 23:48:52

+0

謝謝弗拉德:)他們把當前的時間戳放在網址中,以保證瀏覽器不會嘗試提供它的緩存版本。 – pguardiario 2012-01-14 00:14:57

0

機械化不運行嵌入在頁面中的JavaScript。它只檢索HTML。

如果頁面包含JavaScript,Mechanize可以看到它,並且您可以使用Nokogiri(機械化內部使用)來檢索<script>標籤的內容。但是,由於JavaScript在瀏覽器中執行而導致加載的任何內容都無法在Mechanize中運行。 Watir是解決方案,因爲它驅動瀏覽器本身,它將解釋並運行頁面中的JavaScript。

您可以瀏覽瀏覽器中的頁面,查看源代碼以瞭解使用FireBug運行的內容。通過這些信息,您可以瞭解JavaScript正在做什麼,然後使用Mechanize和Nokogiri從頁面中提取所需信息,以便構建下一個URL,但這可能需要很多工作。

你問的是類似於許多其他有關機械化和JavaScript的問題。我建議你看一下這些所謂的鏈接來獲得替代的想法:

或者search Stack Overflow了關於Ruby,JavaScript和機械化的問題。

相關問題