Javascript 完全加载任何页面而不在浏览器上呈现

Javascript 完全加载任何页面而不在浏览器上呈现,javascript,ruby-on-rails,ruby,dom,Javascript,Ruby On Rails,Ruby,Dom,我需要完全呈现页面,而不在浏览器中实际加载页面,并以字符串形式读取内容。就像所有dom操作都由js完成后的实际最终页面文本一样。你们能给我推荐这个或其他我可以使用的工具的解决方案吗 我使用RubyonRails框架 正如adeneo所建议的,无头浏览器是您想要的 像phantomjs和selenium webdrivergem。我可以想到以下几种方法: 在RoR中使用MSHTML COM对象 如果您在Windows设备上,并且您安装的RoR可以调用COM/ActiveX对象,那么您可以实例化

我需要完全呈现页面,而不在浏览器中实际加载页面,并以字符串形式读取内容。就像所有dom操作都由js完成后的实际最终页面文本一样。你们能给我推荐这个或其他我可以使用的工具的解决方案吗


我使用RubyonRails框架

正如adeneo所建议的,无头浏览器是您想要的


phantomjs
selenium webdriver
gem。

我可以想到以下几种方法:

  • 在RoR中使用MSHTML COM对象
    • 如果您在Windows设备上,并且您安装的RoR可以调用COM/ActiveX对象,那么您可以实例化一个MSHTML对象,呈现页面并获取内容
  • 编写一个NodeJS服务器
    • 您可以使用NodeJS使用相同的技巧在内存中呈现页面,并将内容作为web服务提供给您的RoR实例
  • 编写一个节点Webkit服务器
    • 与上面的想法相同,但您可以直接访问WebKit渲染引擎
所有这些都可以工作,但您希望在每次调用其中一个进程时至少增加一秒钟的加载时间。实际上,您正在制作一个小型版本的web浏览器,它可能会占用内存,并可能会影响服务器的长期稳定性。

1)安装,以便通过操作系统上的命令行提供

(二)

#config/application.rb
模块YourApp
类应用程序

提示:无头浏览器!
# 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')