Как позволить Ruby Mechanize получить страницу, которая находится в строке - PullRequest
12 голосов
/ 03 марта 2012

Обычно 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 Ответ

20 голосов
/ 04 марта 2012

Механизация использует Nokogiri для анализа HTML.Если вы получаете доступ к HTML без протокола передачи данных через Интернет, вам не нужен механизировать.Все, что вам нужно сделать, это проанализировать входной HTML, верно?

Следующее позволит вам сделать это:

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

Если у вас установлен самоцвет Mechanize, у вас уже будет Nokogiri.

В противном случае вы все равно можете создать новую страницу механизации, используя:

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