gpt4 book ai didi

ruby - 使用 Mechanize 查找下一个输入元素?

转载 作者:太空宇宙 更新时间:2023-11-03 17:24:44 25 4
gpt4 key购买 nike

使用 Mechanize,是否可以在页面的 HTML 中找到一个短语,例如“email”,然后找到下一个 <input*之后,填写那个输入字段,并且只填那个字段?

最佳答案

Mechanize 在内部使用 Nokogiri 来处理其 DOM 解析,这是其能够在页面中定位不同元素的基础。

可以访问已解析的 DOM,并通过它使用 Nokogiri 来定位 Mechanize 通常不让我们找到的元素。例如:

require 'mechanize'

agent = Mechanize.new
page = agent.get('http://www.example.com')

# Use Nokogiri to find the content of the <h1> tag...
puts page.at('h1').content # => "Example Domain"

对于您的搜索,您希望使用 XPath 访问器来定位“电子邮件”在页面中的位置。完成后,您可以找到下一个 <input>标签。

从一个简单的 HTML 片段开始,我们假设它来自 Mechanize:

page = Nokogiri::HTML('<div><form><p>email</p><input name="email"></form></div>')
puts page.to_html

看起来像:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><div><form>
<p>email</p>
<input name="email">
</form></div></body></html>

搜索“电子邮件”:

page.at("//*[contains(text(),'email')]")
#<Nokogiri::XML::Element:0x3ff50d0c4bc0 name="p" children=[#<Nokogiri::XML::Text:0x3ff50d0c497c "email">]>

在此基础上,这得到了 <input>标签:

input_tag = page.at("//*[contains(text(),'email')]/following-sibling::input")
#<Nokogiri::XML::Element:0x3ff50d09b75c name="input" attributes=[#<Nokogiri::XML::Attr:0x3ff50d09b5f4 name="name" value="email">]>

找到输入标签后,您可以使用 Nokogiri 从标签中获取“名称”,然后告诉 Mechanize 定位并填写该特定输入字段:

input_tag['name']
=> "email"

要使 Web 表单正常运行,它必须为元素命名。提交表单时,这些将传递给服务器。如果没有名称,确定哪个输入发送了特定数据需要做很多工作,而且,程序员很懒,我们不想努力工作,所以你可以指望有一个名称可以使用。

有关更多信息,请参阅“Ruby Mechanize, Nokogiri and Net::HTTP”,以及 a search of Stack Overflow ,并阅读 Nokogiri documenation and tutorials将为您提供大量所需信息,帮助您了解如何完成其​​余工作。

关于ruby - 使用 Mechanize 查找下一个输入元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15697049/

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