javascript - 如何将自定义 HTML 添加到 Mechanize 页面对象

标签 javascript html ruby nokogiri mechanize

我想知道是否可以将自定义 HTML 代码添加到 Mechanize 页面对象中。目标是避免使用 javascript 代码创建表单,方法是将 javascript 代码生成的 HTML 添加到 mechanize 页面对象(通过 agent.get(uri) 方法获取)并让 mechanize 代理单击提交表单,就像它一样真的在那里。 它应该是可能的,因为表单是直接在页面上创建的,除了 jpeg 之外,不需要任何外部调用。 我不能使用 Selenium 和类似的东西,我需要坚持使用 Mechanize 和 Nokogiri。 任何帮助甚至指导将不胜感激!

最佳答案

查看 Mechanize 文档中的“Scraping Data ”。因为您可以访问和搜索 Nokogiri 文档,所以您可以对其进行修改。

使用 Mechanize 内部使用的 Nokogiri 可以轻松修改文档:

require 'mechanize'

agent = Mechanize.new
page = agent.get('http://www.example.org')
doc = page.parser
first_p = doc.at('p')
first_p.to_html                          # => "<p>This domain is established to be used for illustrative examples in documents. You may use this\n    domain in examples without prior coordination or asking for permission.</p>"
first_p.children = '
<form action="action_page.php">
First name:<br>
<input type="text" name="firstname" value="First name"><br>
Last name:<br>
<input type="text" name="lastname" value="Last name"><br><br>
<input type="submit" value="Submit">
</form>' 
first_p.to_html                          # => "<p>\n    <form action=\"action_page.php\">\n    First name:<br>\n    <input type=\"text\" name=\"firstname\" value=\"First name\"><br>\n    Last name:<br>\n    <input type=\"text\" name=\"lastname\" value=\"Last name\"><br><br>\n    <input type=\"submit\" value=\"Submit\">\n    </form></p>"

向上查找一级,到父级:

page.parser.at('p').parent.to_html # => "<div>\n    <h1>Example Domain</h1>\n    <p>\n    <form action=\"action_page.php\">\n    First name:<br>\n    <input type=\"text\" name=\"firstname\" value=\"First name\"><br>\n    Last name:<br>\n    <input type=\"text\" name=\"lastname\" value=\"Last name\"><br><br>\n    <input type=\"submit\" value=\"Submit\">\n    </form></p>\n    <p><a href=\"http://www.iana.org/domains/example\">More information...</a></p>\n</div>"

是否可以将 Mechanize 与修改后的 HTML 一起使用需要您自己弄清楚。

关于javascript - 如何将自定义 HTML 添加到 Mechanize 页面对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35154822/

相关文章:

javascript - JavaScript 如何将 DOM 元素存储在变量中?

javascript - 为什么 "Product Quick View"JavaScript 插件会影响不是由操作触发的分区?

javascript - 添加后立即绘制到 Canvas 上?

javascript - Web 应用程序选择选项中的文本框

json - 通过Logstash将哈希数组转换为简单哈希

c++ - 如何在 Ruby 扩展 C++ 中获取对象的确切类型?

javascript - Javascript 中带有 HTML 标签的子字符串文本

javascript - D3 创建表

python - Python 和 Perl 中是否有像 Ruby 中那样的全局对象?

javascript - Kendo UI [DropDownList] - 多个元素中的冲突