2013-05-31 87 views
3

我有一個perl腳本,瀏覽網站上的兩個表單頁面,以便將最終表單提交的結果下載到文件中。這個頁面非常大,我寧願把它直接寫到磁盤上,而不是把所有東西都放在內存中。perl WWW :: Mechanize submit_form()直接寫入文件?

這裏有一個代碼片段:

$mech->submit_form(
    form_name => 'search', 
    fields  => { 
     "srch_recd" => $cfg{max_rows}, #results per page 
    } 
); 

$mech->save_content($workdir.$cfg{cachedstones}); 

我知道我能做到這一點:

$mech->get($url, ":content_file"=>$tempfile); 

纔能有使用GET時,結果去到一個文件中()。但是,這樣做對submit_form()沒有效果。

如何才能讓submit_form()直接進入場景而不是坐在內存中? content_file標誌得到(),這是LWP ::用戶代理的一部分:

+0

http://stackoverflow.com/questions/2263662/how-can-i-download-a-file-using-wwwmechanize-or-any-perl-module或http://stackoverflow.com/questions/1727923/how-do-i-download-a-file-with-wwwmechanize-after-it-submits-a-form –

+0

我看到了這些問題,但他們並沒有完全解決同樣的問題。代碼我已經有作品了。我提交表單並獲得一個結果頁面,我用'$ mech-> save_content($ workdir。$ cfg {cachedstones})'保存。但是,這個頁面非常大,浪費了不可接受的內存量。我想優化我的腳本,以便在結果頁面進入時寫入文件。 – Jessa

回答

0

WWW::Mechanize::FAQ

您也可以使用直接保存任何內容到磁盤。

$mech->get('http://www.cpan.org/src/stable.tar.gz', 
      ':content_file' => 'stable.tar.gz'); 

這應該一起工作 - >後,太。

+0

您也可以使用HTTP :: Request :: Common POST()構造一個請求對象,然後調用'$ mech-> request( $ req_object,$ filename)' – runrig

+1

或者(查找我之前完成的)設置current_form,用'my $ req = $ mech-> current_form() - > click()'然後'$構造一個請求對象mech-> request($ req,$ filename)' – runrig