2

watir-webdriver を使用してすべてのコンテンツを含むページを保存するにはどうすればよいですか? browser.htmlブラウザの要素のみを保存します。ダンプしたファイルを開くbrowser.htmlと、スタイリングはありません。

またbrowser.html、iframe を保存しません。iframe をループして個別に保存することはできますが、メイン ページから分離されます。

css と画像を含むページ全体をダンプする簡単な方法がないため、後でスクリーンショットを保存するかもしれません。

require 'fileutils'
class Recorder

  attr_reader :request, :counter, :browser

  # request should contain w(login_id start_time)
  def initialize(request)
    @request, @counter = request, 1
    # Settings class contains my configs (enable recording, paths, etc.)
    FileUtils.mkpath(path) if Settings.recorder.record and !File.exists?(path)
  end

  def record(hash)
    return unless Settings.recorder.record
    @browser = hash["browser"]
    record_html(hash)
    record_frames(hash)
    @counter += 1
  end

private

  # hash should contain (method_name browser)
  def record_html(hash)
    File.open("#{path}#{generate_file_name(hash)}", "w") do |file|
      file.write("<!--#{browser.url}-->\n")
      file.write(browser.html)
    end
  end

  def record_frames(hash)
    browser.frames.each_with_index do |frame, index|
      File.open("#{path}#{generate_file_name(hash, index + 1)}", "w") do |file|
        file.write("<!--#{browser.url}-->\n")
        file.write(frame.html)
      end
    end
  end

  def path
    "#{Settings.recorder.path}/#{request["login_id"]}/#{request["start_time"]}/"
  end

  def generate_file_name(hash, frame=nil)
    return "#{counter}-#{hash["method_name"]}.html" if frame.nil?
    "#{counter}-frame#{frame}-#{hash["method_name"]}.html"
  end
end
4

1 に答える 1

-1

Watir については知りませんが、(Watir がラップする) Selenium WebDriver を使用してページ (ページに直接ある CSS と JavaScript を含む) を保存したい場合、最も簡単な方法はpage_source メソッド (のWebDriver クラス) . その名前が示すように、それは完全なソースを提供します。次に、次のように新しいファイルに保存するだけです。

driver = Selenium::WebDriver.for(:firefox)
driver.get(URL_of_page_to_save)
file = File.new(filename, "w")
file.puts(driver.page_source)
file.close

ただし、JavaScript または CSS を他のファイル内に保存することはありません。

于 2014-02-26T16:08:59.687 に答える