2013-05-31 55 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