2011-07-27 29 views
3

我試圖將數據輸入到表單中,然後在a site using frames上颳去結果。我一直在使用機械化(紅寶石)將數據輸入到表單中,這很好。問題在於,要「加載」框架並「查看」其中包含的表單,您需要「單擊」框架並像單獨的HTML頁面一樣加載頁面。自動化表單和使用框架在網站上進行刮取(使用機械化)

由於該網站使用的認證分開的框架,搜索表單和結果,我不能點擊框,填寫表格,然後得到的結果幀地看到,形式產生,因爲我堅持數據在框架中,我點擊進入。如果我嘗試通過加載原始網址返回,我放棄了前一幀中的操作。

如果有一個應用程序從所有框架中加載所有內容而無需點擊它們,那就完美了。我還沒有找到。

有沒有辦法做到這一點使用紅寶石,或任何應用程序執行相同的功能,機械化(並與nokogiri)加載框架?

回答

0

Mechanise對會話有一些支持,如果您點擊登錄頁面,網站是否仍然保持登錄狀態,然後致電back()並點擊搜索頁面?

當表單讓我感到沮喪時,我經常使用LiveHTTPHeaders(或類似的插件)來檢測登錄和搜索時正在執行的POST,然後執行那些不經過頁面本身。

我不確定這將與認證工作得如何。

+0

本,謝謝你的回覆。我最終使用[Firewatir](http://wiki.openqa.org/display/WTR/FireWatir+Installation)來自動化Firefox瀏覽器並使用它們的ID語法來識別幀中的幀和元素,例如, b.frame(:名稱,「框架」)。 – Andrew

0

爲了詳細闡述Ben的迴應,我想我會將我的解決方案發布到Mechanize無法訪問框架的問題,然後導航回框架,因爲對於我的特定站點,當您導航回時,它會取消驗證。他使用回叫()的解決方案可能適用於大多數網站,但在此期間我最終採取了不同的路線。

我用Firewatir通過Firefox瀏覽器將數據傳遞給表單。在一個框架來訪問一個元素的代碼看起來是這樣的:

b.frame(:name, "frame_name").field_type(:name, "field_name").action 

既然你不必導航到在這種情況下一個框架,你不必擔心取消認證或從屬幀重裝當你正在來回導航。雖然機械化是一個有用的工具,但當條件如上所述時,我發現Firewatir在使用框架時是更好的選擇。