4

動的に構築されるページからデータを取得する必要があります。私が見つけた 1 つの解決策は Watir です。

次のコードは、irb から正常に動作します。

require 'rubygems'
require 'watir-webdriver'
require 'headless'

Headless.ly do
  browser = Watir::Browser.new :firefox
  browser.goto "google.com"
  browser.close
end

Rails アプリケーションから実行しようとすると、次の問題が発生します。

宝石ファイル:

gem 'headless'
gem 'watir-webdriver'

アクション:

def test_action
    Headless.ly do
          browser = Watir::Browser.new(:firefox)
          browser.goto "google.com"
          browser.close
     end
end

次の出力があります:

no such file to load -- {
  "frozen": {
    "app.update.auto": false,
    "app.update.enabled": false,
    "browser.download.manager.showWhenStarting": false,
    "browser.EULA.override": true,
    "browser.EULA.3.accepted": true,
    "browser.link.open_external": 2,
    "browser.link.open_newwindow": 2,
    "browser.offline": false,
    "browser.safebrowsing.enabled": false,
    "browser.safebrowsing.malware.enabled": false,
    "browser.search.update": false,
    "browser.sessionstore.resume_from_crash": false,
    "browser.shell.checkDefaultBrowser": false,
    "browser.tabs.warnOnClose": false,
    "browser.tabs.warnOnOpen": false,
    "devtools.errorconsole.enabled": true,
    "dom.disable_open_during_load": false,
    "extensions.autoDisableScopes": 10,
    "extensions.logging.enabled": true,
    "extensions.update.enabled": false,
    "extensions.update.notifyUser": false,
    "network.manage-offline-status": false,
    "network.http.phishy-userpass-length": 255,
    "offline-apps.allow_by_default": true,
    "prompts.tab_modal.enabled": false,
    "security.fileuri.origin_policy": 3,
    "security.fileuri.strict_origin_policy": false,
    "security.warn_entering_secure": false,
    "security.warn_entering_secure.show_once": false,
    "security.warn_entering_weak": false,
    "security.warn_entering_weak.show_once": false,
    "security.warn_leaving_secure": false,
    "security.warn_leaving_secure.show_once": false,
    "security.warn_submit_insecure": false,
    "security.warn_viewing_mixed": false,
    "security.warn_viewing_mixed.show_once": false,
    "signon.rememberSignons": false,
    "toolkit.networkmanager.disable": true,
    "toolkit.telemetry.prompted": 2,
    "toolkit.telemetry.enabled": false,
    "toolkit.telemetry.rejected": true
  },
  "mutable": {
    "browser.dom.window.dump.enabled": true,
    "browser.startup.page": 0,
    "browser.startup.homepage": "about:blank",
    "dom.max_script_run_time": 30,
    "dom.report_all_js_exceptions": true,
    "javascript.options.showInConsole": true,
    "network.http.max-connections-per-server": 10,
    "webdriver_accept_untrusted_certs": true,
    "webdriver_assume_untrusted_issuer": true
  }
}

問題はどこですか?

4

3 に答える 3

2

私のプロジェクトにはあなたと同じエラーがあります

この質問は、宝石「selenium-webdriver」が原因であることがわかりました

バージョンは「2.20.0」である必要があります

gem のバージョンがこれよりも高い場合、このエラーが発生します。

于 2012-04-24T14:55:41.923 に答える
1

このコードを初期化ディレクトリに配置するだけで、「watir-webdriver」、「0.5.5」で動作します

require 'childprocess'
require 'tmpdir'
require 'fileutils'
require 'date'

require 'multi_json'
require 'selenium/webdriver/common'

module Selenium
  module WebDriver

    if MultiJson.respond_to?(:load)
      # @api private
      def self.json_load(obj)
        MultiJson.decode(obj)
        #MultiJson.load(obj) here was mistake
      end
    else
      # @api private
      def self.json_load(obj)
        MultiJson.decode(obj)
      end
    end

  end
end
于 2012-04-25T13:04:39.053 に答える
0

ここで議論された問題

これを解決するには、次のようにmulti_jsongemを更新することもできます。

bundle update multi_json

私の場合、バージョン1.0.3から1.3.5に更新すると、問題が解決しました。

于 2012-05-23T23:20:31.030 に答える