【发布时间】:2015-09-05 12:38:45
【问题描述】:
所以我使用 Mechanize 来获取页面的表单列表。表单标识因网站而异,所以我需要更稳定的东西,例如选择器。
有没有一种方法可以使用简单的 CSS 选择器从 Mechanize 提供的表单列表中选择正确的表单?
【问题讨论】:
标签: ruby forms nokogiri mechanize
所以我使用 Mechanize 来获取页面的表单列表。表单标识因网站而异,所以我需要更稳定的东西,例如选择器。
有没有一种方法可以使用简单的 CSS 选择器从 Mechanize 提供的表单列表中选择正确的表单?
【问题讨论】:
标签: ruby forms nokogiri mechanize
是的。 Mechanize 返回的页面对象是一个 Nokogiri 文档,因此您可以使用 Nokogiri 的所有方法在 DOM 中查找节点。
search 和 at 是通用方法,它们都采用 CSS 或 XPath 选择器。 at 等价于 search('some selector').first。在需要查找节点的绝大多数情况下,我都会使用这两个。还有 css 和 xpath 是特定于选择器类型的,它们的 at 等效于 at_css 和 at_xpath。
考虑这段代码:
require 'mechanize'
agent = Mechanize.new
page = agent.get('http://www.example.net')
page.class # => Mechanize::Page
page.at('title').class # => Nokogiri::XML::Element
page.at('title').text # => "Example Domain"
此示例获取页面的<title>,但您可以轻松地插入如何从您正在使用的 DOM 中获取特定表单。
【讨论】:
您可以使用form_node 方法将表单与<form> 元素匹配:
form = page.forms.find{|f| f.form_node == page.at('[name=f]')}
【讨论】: