【问题标题】:How to add custom HTML to a Mechanize page object如何将自定义 HTML 添加到机械化页面对象
【发布时间】:2016-05-11 08:06:40
【问题描述】:

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

【问题讨论】:

  • 欢迎。请阅读“How to Ask”。你的研究向你展示了什么?如果你什么都没做,为什么不呢?如果您有但没有帮助,请向我们展示您在哪里搜索并解释为什么没有帮助。否则,请向我们展示您的最小代码以显示您的努力。 meta.stackoverflow.com/q/261592/128421tinyurl.com/stack-hints 很适合阅读。
  • 使用 Mechanize#post 可能更容易,表单无论如何都会调用它。
  • @pguardiario 我也尝试过这种方式,但是有一个由 javascript 生成的字符串需要与请求一起传递。
  • 嗯?您要么拥有所需的一切,要么没有。如果你有它,你可以提出请求。如果你不这样做,什么都不会起作用。

标签: javascript html ruby nokogiri mechanize


【解决方案1】:

查看 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>"

修改后的 HTML 是否可以使用 Mechanize 由您自己决定。

【讨论】:

  • 谢谢,这就是我一直在寻找的方向!我会试试这个,让你知道我是失败还是成功。那个“由你来弄清楚”让我觉得这不会那么容易:D 谢谢你的时间 Tin Man!
  • 不,这是因为 SO 不仅仅是一个“帮我完成这个网站”,它还有教学的组成部分。好老师不会教你如何做每一件事,他们会引导你朝着正确的方向前进,并让你弄清楚。
  • 仍在处理这个问题,我已经成功地插入并查看了我的文档中的代码,然后我将它传递到一个新的机械化页面,其中包含page2 = Mechanize::Page.new(URI.parse('http://www.example.com'),{'content-type'=&gt;'text/html'},doc.to_html,nil,agent) 这一行之后我提交了按钮但我一直收到相同的页面,好像出了什么问题,但我不明白是什么。有没有办法查看我在请求中究竟发送了什么,或者缺少什么?
猜你喜欢
  • 2011-01-12
  • 1970-01-01
  • 2019-10-29
  • 2020-06-08
  • 2011-02-02
  • 1970-01-01
  • 1970-01-01
  • 2013-09-08
  • 1970-01-01
相关资源
最近更新 更多