如何让Ruby Mechanize获得一个以字符串形式存在的页面

时间:2012-03-03 19:56:35

标签: ruby nokogiri mechanize mechanize-ruby

通常,Mechanize会从URL获取一个网页,get方法的结果是一个Mechanize :: Page对象,您可以从中使用许多有用的方法。

如果页面存在于字符串中,我如何获得相同的Mechanize :: Page对象?

require 'mechanize'

html = <<END_OF_STRING
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<title>Page Title</title>
<style type="text/css">
</style>
</head>
<body>
<h1>This is a test</h1>
</body>
</html>
END_OF_STRING

agent = Mechanize.new

# How can I get the page result from the string html?
#page = ...

1 个答案:

答案 0 :(得分:20)

Mechanize使用Nokogiri来解析HTML。如果您在不需要Internet传输协议的情况下访问HTML,则不需要Mechanize。您要做的就是解析输入HTML,对吗?

以下内容可让您这样做:

require 'Nokogiri'
html = 'html here'
page = Nokogiri::HTML html

如果您安装了Mechanize gem,您将拥有Nokogiri。

否则,您仍然可以使用以下方法创建新的Mechanize页面:

require 'Mechanize'
html = 'html here'
a = Mechanize.new
page2 = Mechanize::Page.new(nil,{'content-type'=>'text/html'},html,nil,a)