gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 07:27:27 24 4
gpt4 key购买 nike

我正在尝试抓取一个只能依靠类和元素层次结构来找到正确节点的站点。但是使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com