4

我正在尝试编写一个屏幕截图,我想下载一个网站的主页。

当我在浏览器上查看页面的源代码时,我没有看到完整的 HTML 代码。当我在浏览器中查看源代码时,如何确保加载我看到的所有内容?

# Required Gems
require 'rubygems' # Loads gems
require "nokogiri" # Nokogiri
require "open-uri" # For Nokogiri
require "chronic" # For time parsing
require "cgi" # For parsing urls
require 'net/http' # For image downloading


URL = URI.parse("http://www.gocrimson.com/landing/index")

hBOList = Nokogiri::HTML(open(URL)) 
4

4 回答 4

3

浏览器的源视图不一定与请求的 HTML 文件本身相匹配,因为 Ajax 被用于在原始请求页面加载之后加载页面块。

如果页面使用 JavaScript 和 Ajax,则不能使用常规方法检索页面源,除非您解码整个内容加载链并在 Ruby 代码中重新创建它们。

或者,您可以使用 Ruby 可以与之通信的浏览器,告诉它加载初始页面,然后在浏览器中触发 JavaScript 的操作,浏览器将加载其他内容,然后您的代码可以提取它并执行您想要的操作. 为此,您应该查看Watir或其衍生物之一。

于 2013-01-12T06:47:36.350 回答
0

做:

require 'open-uri'
File.open("page_test.txt","w"){|f| f << open("http://www.gocrimson.com/landing/index").read}

复制所需页面的全部内容?如果是这样,Nokogiri 在某处丢了一些东西和/或这些家伙在页面渲染后通过 JavaScript 加载了一些东西,如果不是,你的解析代码会很有趣。

于 2013-01-11T21:56:16.507 回答
0

Hisako 和 redcup 你应该按照上面铁皮人的建议尝试 watir。就像是:

require 'rubygems'
require 'watir-webdriver'

browser = Watir::Browser.new
browser.goto "http://www.gocrimson.com/landing/index"

puts browser.html

应该做你想做的。

于 2013-01-21T21:08:38.240 回答
0

我认为某些内容是通过单击某些按钮或某些操作后的 ajax 调用加载的。如果您知道您想要的东西以及执行此操作的操作。然后你可以看到mechanize。Mechanize 在内部使用 Nokogiri,它有助于加载需要一些操作的页面。

于 2013-01-13T08:56:45.173 回答