2012-03-03 31 views
12

Nói chung Cơ chế sẽ lấy một trang web từ một URL và kết quả của phương thức get là một đối tượng Mechanize :: Page, từ đó bạn có thể sử dụng rất nhiều phương pháp hữu ích .Làm thế nào để cho Ruby Mechanize nhận được một trang sống trong một chuỗi

Nếu trang tồn tại trong một chuỗi, làm cách nào để nhận được cùng một đối tượng Cơ chế :: Trang?

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 = ... 

Trả lời

19

Cơ chế sử dụng Nokogiri để phân tích cú pháp HTML. Nếu bạn đang truy cập vào HTML mà không cần một giao thức truyền tải internet bạn không cần Cơ chế. Tất cả những gì bạn đang muốn làm là phân tích cú pháp HTML đầu vào, đúng không?

Sau đây sẽ cho phép bạn làm điều này:

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

Nếu bạn đã viên ngọc mechanize cài đặt bạn sẽ đã có Nokogiri.

Nếu không, bạn vẫn có thể tạo một trang mechanize mới sử dụng:

require 'Mechanize' 
html = 'html here' 
a = Mechanize.new 
page2 = Mechanize::Page.new(nil,{'content-type'=>'text/html'},html,nil,a) 
Các vấn đề liên quan