2014-09-02 40 views
0

我一直在使用機械化從網站填寫表單,但現在這已改變,並且一些必填字段似乎隱藏起來,無法使用機械化不再是 - 在打印所有可用的表單時。 我認爲它已被修改爲使用更多的當前方法(application/x-www-form-urlencoded),但是我還沒有找到更新我的腳本以繼續以編程方式使用此表單的方法。獲取應用程序所需的密鑰/ x-www-form-urlencoded

從我讀過的內容中,我應該能夠直接向提交按鈕發送一個字典(鍵/值對),而不是首先填寫表格 - 如果我錯了,請糾正我的錯誤。 但我一直沒能找到一種方法來獲得所需的密鑰...

我會大量讚賞它,如果有人能指向我在正確的方向或直接讓我不能再這樣做,以防萬一這是不可能的。

回答

2

在任何情況下,您都不能提取服務器期望的所有字段。

帖子目標,處理POST的代碼,是一個黑匣子。您無法查看服務器運行的代碼。關於它期望的最佳信息是原始表單告訴您的瀏覽器發佈的內容。原始表單不僅包含HTML,還包含與它一起發送的頭文件(例如Cookie)以及由瀏覽器運行的任何JavaScript代碼。

在很多情況下,解析爲表單發送的HTML就足夠了;這就是Mechanize(或最近更現代的框架,如robobrowser)所做的,加上一點點cookie處理,並確保包含引用鏈接器等典型標題。但是,如果任何JavaScript代碼操縱 HTML或攔截表單提交以添加或刪除數據,則Mechanize或其他Python表單解析器無法複製該步驟。

您的選項則是:

  • 反向工程什麼的Javascript代碼確實和複製,在Python代碼。您的瀏覽器的開發工具可以在這裏幫助;例如,觀察網絡選項卡上發佈的內容,或者使用調試器瀏覽JavaScript代碼以查看其功能。

  • 使用從Python控制的實際瀏覽器。硒能爲你做到這一點;它可以驅動桌面瀏覽器(Chrome,Firefox等),也可以用來驅動PhantomJS等無頭瀏覽器。這對資源來說比較重要,但實際上會運行JavaScript代碼,並讓您像每個瀏覽器一樣發佈表單。

+0

哇,非常感謝。這已經非常有用。我必須嘗試一下,因爲我相信它是修改html的java。不幸的是,我不認爲這將是可行的,因爲我將不得不填寫表格100000次,在模擬瀏覽器時會非常緩慢,但它應該給我一個很好的起點。希望我可以通過這種方式獲得請求的密鑰。我還沒有接受答案,因爲我稍後可能會有更深入的問題。謝謝 – T1M 2014-09-02 11:14:02

+0

@T1M:這種格式雖然不適合深入的後續問題。但願我給你一些想法。 – 2014-09-02 11:17:58

+0

一個跟進問:你說什麼是最可靠的做法,最可靠最快?實際上模擬瀏覽器的功能(PhantomJS)還是嘗試對java代碼進行反向工程? – T1M 2014-09-02 11:32:30

相關問題