使用框架自动化网站上的表单和抓取(使用Mechanize)

时间:2011-07-27 04:50:06

标签: ruby mechanize frames

我正在尝试将数据输入到表单中,然后在a site using frames上搜索结果。我一直在使用Mechanize(ruby gem)将数据输入到表单中,这很好。问题是Mechanize treats frames as links,并且“加载”框架并“看到”其中包含的表单,您需要“单击”框架并像单独的HTML页面一样加载页面。

由于此站点使用单独的框架进行身份验证,搜索表单和结果,因此我无法单击框架,填写表单,然后转到结果框架以查看表单生成的数据,因为我陷入困境我点击进入的框架。如果我尝试通过加载原始URL返回,我放弃了我在前一帧中所做的事情。

如果有一个应用程序加载所有帧中的所有内容而不必点击它们,那将是完美的。我还没找到。

有没有办法使用ruby或任何执行与Mechanize相同功能的应用程序(并与nokogiri一起使用)来加载帧?

2 个答案:

答案 0 :(得分:0)

Mechanise对会话有一些支持,如果您点击登录页面,网站是否仍然不会让您登录,然后拨打back()并点击搜索页面?

当表格过去让我感到沮丧时,我经常使用LiveHTTPHeaders(或类似的插件)来检测登录和搜索时执行的POST,然后执行浏览页面本身。

我不确定这种身份验证效果如何。

答案 1 :(得分:0)

为了详细阐述Ben的回复,我想我会将我的解决方案发布到Mechanize无法访问框架的问题,然后导航回框架,因为对于我的特定网站,当你导航回来时它会取消认证。他使用回调()的解决方案可能适用于大多数网站,但我最终采取了不同的路线。

我使用Firewatir通过Firefox浏览器将数据传递给表单。访问框架中元素的代码如下所示:

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

由于您不必在这种情况下导航到某个帧,因此您在进行来回导航时不必担心重新进行身份验证或依赖帧重新加载。虽然Mechanize是一个很有用的工具,但是当条件如上所述时,我发现Firewatir是使用框架时更好的选择。