Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 使用框架(使用Mechanize)在站点上自动化表单和刮片_Ruby_Mechanize_Frames - Fatal编程技术网

Ruby 使用框架(使用Mechanize)在站点上自动化表单和刮片

Ruby 使用框架(使用Mechanize)在站点上自动化表单和刮片,ruby,mechanize,frames,Ruby,Mechanize,Frames,我正在尝试将数据输入到表单中,然后将结果刮在上面。我一直在使用Mechanize(RubyGem)将数据输入表单,这很好。问题是,要“加载”框架并“查看”其中包含的表单,您需要“单击”框架并像加载单独的HTML页面一样加载页面 由于此站点使用单独的框架进行身份验证、搜索表单和结果,我无法单击框架、填写表单,然后进入结果框架查看表单生成的数据,因为我被卡在了我单击的框架中。如果我试图通过加载原始URL返回,我就会失去在前一帧中所做的操作 如果有一个应用程序可以加载所有帧中的所有内容,而不必单击它们

我正在尝试将数据输入到表单中,然后将结果刮在上面。我一直在使用Mechanize(RubyGem)将数据输入表单,这很好。问题是,要“加载”框架并“查看”其中包含的表单,您需要“单击”框架并像加载单独的HTML页面一样加载页面

由于此站点使用单独的框架进行身份验证、搜索表单和结果,我无法单击框架、填写表单,然后进入结果框架查看表单生成的数据,因为我被卡在了我单击的框架中。如果我试图通过加载原始URL返回,我就会失去在前一帧中所做的操作

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


有没有办法使用ruby或任何与加载帧的Mechanize(并与nokogiri配合使用)功能相同的应用程序来实现这一点?

Mechanise对会话有一定的支持,如果您单击登录页面,然后调用
back()
并单击搜索页面,网站是否仍让您保持登录状态

过去,当表单让我感到沮丧时,我常常求助于使用(或类似的插件)来检测登录和搜索时正在执行的帖子,然后在不浏览页面的情况下执行这些帖子


不过,我不确定这对身份验证的效果如何。

为了详细说明Ben的回答,我想我会发布我的解决方案,解决Mechanize无法访问帧的问题,然后导航回帧,因为对于我的特定站点,当您导航回帧时,它会取消身份验证。他使用callback()的解决方案可能适用于大多数网站,但我最终选择了另一条路线

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

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

由于在这种情况下不必导航到帧,因此在来回导航时不必担心取消验证或重新加载从属帧。尽管Mechanize是一个有用的工具,但我发现在上述条件下使用帧时,Firewatir是更好的选择。

Ben,感谢您的回复。最后我用它来自动化Firefox浏览器,并使用它们的ID语法来识别框架和框架中的元素,例如b.frame(:name,“frame”)。