我需要完全呈现页面,而不是在浏览器中实际加载页面并将内容读取为字符串。像所有dom操作由js完成之后的实际最终页面文本一样。你们能建议我解决这个或我可以使用的任何其他工具吗?
我在rails框架上使用ruby。
答案 0 :(得分:0)
以下是我能想到的几种方法:
所有这些都可以工作,但是每次调用其中一个进程时,您都希望至少添加一秒的加载时间。此外,您实际上正在制作一个迷你版的网络浏览器,它可能会造成内存损失,并可能影响服务器的长期稳定性。
答案 1 :(得分:0)
1)安装PhantomJS,以便通过操作系统上的命令行提供
2)
# config/application.rb
module YourApp
class Application < Rails::Application
config.after_initialize do
require Rails.root.join('lib/page_to_s.rb')
end
end
end
# lib/page_to_s.rb
require 'tempfile' # see: http://www.ruby-doc.org/stdlib-1.9.3/libdoc/tempfile/rdoc/Tempfile.html
module PageToS
extend self
def get(url)
file = ::Tempfile.new('page_to_s.js')
begin
# http://techslides.com/grabbing-html-source-code-with-phantomjs-or-casperjs/
file.write("var page = require('webpage').create();page.open('#{url}', function (status) {var js = page.evaluate(function () {return document;});console.log(js.all[0].outerHTML); phantom.exit();});")
file.close
`phantomjs #{file.path}`
ensure
file.unlink
end
end
end
# anywhere
str = PageToS.get('http://localhost:3000/any_page')