Javascript 完全加载任何页面而不在浏览器上呈现
我需要完全呈现页面,而不在浏览器中实际加载页面,并以字符串形式读取内容。就像所有dom操作都由js完成后的实际最终页面文本一样。你们能给我推荐这个或其他我可以使用的工具的解决方案吗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对象,那么您可以实例化
我使用RubyonRails框架 正如adeneo所建议的,无头浏览器是您想要的
像
phantomjs
和selenium webdriver
gem。我可以想到以下几种方法:
- 在RoR中使用MSHTML COM对象
- 如果您在Windows设备上,并且您安装的RoR可以调用COM/ActiveX对象,那么您可以实例化一个MSHTML对象,呈现页面并获取内容
- 编写一个NodeJS服务器
- 您可以使用NodeJS使用相同的技巧在内存中呈现页面,并将内容作为web服务提供给您的RoR实例
- 编写一个节点Webkit服务器
- 与上面的想法相同,但您可以直接访问WebKit渲染引擎
#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')