ruby – 如何从Mechanize :: Page的搜索方法中获取Mechanize对象?

ruby – 如何从Mechanize :: Page的搜索方法中获取Mechanize对象?,第1张

概述我正在尝试抓取一个网站,我只能依靠类和元素层次结构来找到正确的节点.但是使用Mechanize :: Page#search返回Nokogiri :: XML :: Elements,我不能用它来填写和提交表单等. 我真的很想使用纯CSS选择器,但是对于类的匹配似乎也很简单,各种_with方法也是如此.但是,与简单地使用CSS选择器相比,匹配诸如:not(.class)之类的东西非常冗长,而我不知 @H_502_6@ 我正在尝试抓取一个网站,我只能依靠类和元素层次结构来找到正确的节点.但是使用Mechanize :: Page#search返回Nokogiri :: XML :: Elements,我不能用它来填写和提交表单等.

我真的很想使用纯css选择器,但是对于类的匹配似乎也很简单,各种_with方法也是如此.但是,与简单地使用css选择器相比,匹配诸如:not(.class)之类的东西非常冗长,而我不知道如何匹配元素层次结构.

有没有办法将Nokogiri元素转换回Mechanize对象,甚至更好地直接从搜索方法中获取它们?

解决方法 与声明的 in this answer一样,您可以使用通过Mechanize :: Page#search或Mechanize :: Page#at检索的Nokogiri :: XML :: Element构建一个新的Mechanize :: Form对象:

a = Mechanize.newpage = a.get 'https://stackoverflow.com/'# Get the search form via ID as a Nokogiri::XML::Elementform = page.at '#search'# Convert it back to a Mechanize::Form objectform = Mechanize::Form.new form,a,page# Use it!form.q = 'Foobar'result = form.submit

注意:您必须向构造函数提供Mechanize对象和Mechanize :: Page对象才能提交表单.否则它只是一个没有上下文的Mechanize :: Form对象.

似乎没有中心效用函数将Nokogiri :: XML :: Elements转换为Mechanize元素,而是在需要它们的地方实现转换.因此,编写一个通过CSS或XPath搜索文档并返回Mechanize元素的方法(如果适用)将需要在节点类型上使用相当大的switch-case.不完全是我想象的.

总结

以上是内存溢出为你收集整理的ruby – 如何从Mechanize :: Page的搜索方法中获取Mechanize对象?全部内容,希望文章能够帮你解决ruby – 如何从Mechanize :: Page的搜索方法中获取Mechanize对象?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1282912.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存