所以我使用Mechanize来获取页面的表单列表。表单标识可能因网站而异,因此我需要更稳定的东西,例如选择器。
有没有办法使用简单的 CSS 选择器从 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]')}