我想知道是否有可能将自定义HTML代码添加到机械化页面对象中。其目的是通过将由javascript代码生成的超文本标记语言添加到机械化页面对象(通过agent.get(uri)方法获取),并让机械化代理点击提交表单,从而避免创建表单的javascript代码,就好像它真的在那里一样。这应该是可能的,因为表单是直接在页面上创建的,没有任何外部调用,除了一个jpeg。我不能使用硒和类似物,我需要坚持使用机械化和Nokogiri。任何帮助甚至指导都将不胜感激!
发布于 2016-02-03 07:18:15
请看机械化文档中的"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,这将由您自己决定。
https://stackoverflow.com/questions/35154822
复制相似问题