- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在尝试抓取一个只能依靠类和元素层次结构来找到正确节点的站点。但是使用 Mechanize::Page#search
返回 Nokogiri::XML::Element
,我不能用它来填写和提交表单等。
我真的很想使用纯 CSS 选择器,但是使用各种 _with
方法匹配类似乎也非常简单。但是,与简单地使用 CSS 选择器相比,匹配 :not(.class)
之类的东西非常冗长,而我不知道如何匹配元素层次结构。
有没有办法将 Nokogiri 元素转换回 Mechanize 对象,或者甚至更好地直接从 search
方法中获取它们?
最佳答案
如前所述in this answer您可以简单地使用通过 Mechanize::Page#search
检索的 Nokogiri::XML::Element
构造一个新的 Mechanize::Form
对象或 Mechanize::页面#at
:
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
转换为 Mechanize 元素的中央实用程序函数,而是在需要的地方实现转换。因此,编写一个通过 CSS 或 XPath 搜索文档并返回 Mechanize 元素(如果适用)的方法将需要在节点类型上使用相当大的 switch-case。跟我想象的不太一样。
关于ruby - 如何从 Mechanize::Page 的搜索方法中获取 Mechanize 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9142831/
我是一名优秀的程序员,十分优秀!