Ruby 如何从Mechanize::Page';什么是搜索方法?

Ruby 如何从Mechanize::Page';什么是搜索方法?,ruby,nokogiri,mechanize-ruby,Ruby,Nokogiri,Mechanize Ruby,我正在尝试创建一个只能依靠类和元素层次结构来找到正确节点的站点。但是使用Mechanize::Page#search返回Nokogiri::XML::Elements,我不能用它来填写和提交表单等 我真的很想使用纯CSS选择器,但使用各种\u和方法对类进行匹配似乎也很简单。然而,与简单地使用CSS选择器相比,像:not(.class)这样的匹配非常冗长,而我不知道如何匹配元素层次结构 有没有办法将Nokogiri元素转换回Mechanize对象,或者更好地直接从search方法获取它们?如前所述

我正在尝试创建一个只能依靠类和元素层次结构来找到正确节点的站点。但是使用
Mechanize::Page#search
返回
Nokogiri::XML::Element
s,我不能用它来填写和提交表单等

我真的很想使用纯CSS选择器,但使用各种
\u和
方法对类进行匹配似乎也很简单。然而,与简单地使用CSS选择器相比,像
:not(.class)
这样的匹配非常冗长,而我不知道如何匹配元素层次结构

有没有办法将Nokogiri元素转换回Mechanize对象,或者更好地直接从
search
方法获取它们?

如前所述,您只需使用
Nokogiri::XML::Element
通过
Mechanize::Page\search
检索的
机械化::第#页位于

a = Mechanize.new
page = a.get 'https://stackoverflow.com/'

# Get the search form via ID as a Nokogiri::XML::Element
form = page.at '#search'

# Convert it back to a Mechanize::Form object
form = Mechanize::Form.new form, a, page

# Use it!
form.q = 'Foobar'
result = form.submit
注意:您必须向构造函数提供
Mechanize
对象和
Mechanize::Page
对象才能提交表单。否则它将只是一个没有上下文的
Mechanize::Form
对象



似乎没有将
Nokogiri::XML::Element
s转换为机械化元素的中心实用程序函数,而是在需要的地方实现转换。因此,编写一个通过CSS或XPath搜索文档并返回Mechanize元素(如果适用)的方法需要在节点类型上使用相当大的切换大小写。与我想象的不完全一样。

你有没有一个表单字段的例子,你不能用Mechanize识别?@标记相关页面上的所有表单和表单字段都随机生成ID和名称。当然,没有什么元素是你无法识别的,因为你总是可以做一些事情,比如
page.forms[3]
。但是,使用
page.search.检索表单。主内容表单“
对我来说更有意义,而且当网站上的内容发生变化时,可能不太容易中断。我相信你可以在中找到答案。有没有办法做到这一点,并获得与页面对象而不是表单相当的内容。已尝试Mechanize::Page.new,但无法使用。。。Mech语法比其他语法更容易使用Nokogiri@KeiranBetteley你能详细说明一下吗?我不明白你为什么需要一个新的页面对象?我想做的是获取网页的一个子集,例如page.search(“table.results”),然后对其使用mechanise方法。e、 g.result=page.search(“table.results”)。第一个result=result.covert\u to\u mechanize\u object links=results.links这更有意义吗?我想知道您是否可以创建一个带有原始页眉信息的假页面,但只将DOM的特定部分作为body@KeiranBetteley如果需要处理页面的通用子集,例如节点,那么我建议实际使用
Nokogiri::XML::Node
。如果您想使用MechanizeAPI,那么很遗憾,我无法帮助您。这是可能的,但这可能包括相当多的代码读取、猴子补丁和依赖未记录的行为。祝你好运;)