2017-01-10 4 views
0

Firefox(46)+ Capybara + Seleniumを使用してリモートWebサイトからデータを解析するソリューションがあります。私はpath_to_firefox_profile引数をinitializeに渡します。これは実際のFirefoxプロファイルフォルダです。Capybara/Selenium - 各呼び出しでSeleniumドライバをリロードする力

a = MyParser.new(profile_a) 
a.parse_something 
b = MyParser.new(profile_b) 
b.parse_something 

私は別のプロファイルを指定したにも関わらず...インスタンスbは、プロファイルAがロードされています:

問題は、私はこのコードを実行した場合ということです。

しかし、これらの2行を別々のプロセスで実行すると、私は自分が望むものを得ることができます。ですから、私はそれらのうちの1つ(CapybaraまたはSelenium)がプロファイル設定をルビプロセスごとに1回保存し、必要に応じて変更しないと仮定します。

同じプロセス内でプロファイルを変更する方法はありますか?

私はFirefoxにしようとしますが、新しいURLを訪れたときに助けになりません。Seleniumは新しいプロフィールの代わりにまったく同じプロフィールのFirefoxウィンドウを開きます。

class MyParser 
    def initialize(path_to_firefox_profile) 
    Capybara.register_driver(:selenium) do |app| 
     client = Selenium::WebDriver::Remote::Http::Default.new 
     client.timeout = 150 
     Capybara::Selenium::Driver.new(app, 
     profile: path_to_firefox_profile, 
     http_client: client) 
    end 
    end 

    def parse_something 
    # perform some parsings & return result 
    end 
end 

答えて

0

カピバラさんregister_driverレジスタあなたが世界的に割り当て、そのセッションで(名前で)これらのドライバを使用する名前でドライバ。また、Webアプリケーションをテストする人々が使いやすいように自動的にセッションを管理します。ここでの問題は、新しく登録されたドライバとの新しいセッションが作成されていないことです。これは、あなたが実際に設計されたものにCapybaraを使用していないため、セッション管理の重要性をもう少し引き出す必要があるからです。これまでに2つ以上のMyParserオブジェクトを使用する予定がある場合は、作成したMyParserインスタンスごとに新しいセッションを作成し、そのセッションをすべてのMyParserメソッドで使用する必要があります。 MyParserインスタンスごとに異なるドライバ設定を使用しているので、おそらくそれぞれのドライバの登録方法が異なっているはずです。

class MyParser 
    def initialize(path_to_firefox_profile) 
    Capybara.register_driver(self.object_id.to_s) do |app| 
     client = Selenium::WebDriver::Remote::Http::Default.new 
     client.timeout = 150 
     Capybara::Selenium::Driver.new(app, 
     profile: path_to_firefox_profile, 
     http_client: client) 
    end 
    @session = Capybara::Session.new(self.object_id.to_s) 
    end 

    def parse_something 
    @session.visit("some url") 
    @session.find(...) # perform some parsings & return result 
    end 
end 

また、各MyParserインスタンスが終了したらセッションをクリーンアップする必要があります。

+0

これは私が探していたものです。それは動作します、ありがとう! – nattfodd

関連する問題