rap*_*sse 4 ruby nokogiri mechanize-ruby
我正在尝试抓取一个网站,我只能依靠类和元素层次结构来找到正确的节点.但是使用我不能用来填写和提交表格等的Mechanize::Page#search
退货Nokogiri::XML::Element
.
我真的很想使用纯CSS选择器,但是对于类的匹配似乎也很简单_with
.但是,:not(.class)
与简单地使用CSS选择器相比,匹配的东西非常冗长,而我不知道如何匹配元素层次结构.
有没有办法将Nokogiri元素转换回Mechanize对象,甚至更好地直接从search
方法中获取它们?
如同在本答案中所述,您可以Mechanize::Form
使用Nokogiri::XML::Element
检索到的via Mechanize::Page#search
或者简单地构造一个新对象Mechanize::Page#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
Run Code Online (Sandbox Code Playgroud)
注意:您必须向构造函数提供Mechanize
对象和Mechanize::Page
对象才能提交表单.否则它只是一个Mechanize::Form
没有上下文的对象.
似乎没有中央效用函数将Nokogiri::XML::Element
s 转换为Mechanize元素,而是在需要它们的地方实现转换.因此,编写一个通过CSS或XPath搜索文档并返回Mechanize元素的方法(如果适用)将需要在节点类型上使用相当大的switch-case.不完全是我想象的.
归档时间: |
|
查看次数: |
4806 次 |
最近记录: |