Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions app/models/browser.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
require "fileutils"
require "json"

class Browser
PAGE_TIMEOUT = 1.minute
PROCESS_TIMEOUT = 30.seconds
Expand Down Expand Up @@ -45,6 +48,17 @@ class Browser
"no-sandbox" => nil
}.freeze

CHROME_CONTENT_SETTING_BLOCK = 2

CHROME_PROFILE_PREFERENCES = {
profile: {
block_third_party_cookies: true,
default_content_setting_values: {
cookies: CHROME_CONTENT_SETTING_BLOCK
}
}
}.freeze

STEALTH_EXTENSION = Rails.root.join("vendor/javascript/stealth.min.js").freeze

class << self
Expand Down Expand Up @@ -128,6 +142,8 @@ def run_script_on_html(html, script, script_tag)
private

def browser
prepare_user_data_dir

@browser ||= Ferrum::Browser.new(settings)
end

Expand All @@ -141,6 +157,13 @@ def user_data_dir
@user_data_dir ||= "/tmp/chrome-#{SecureRandom.hex(8)}"
end

def prepare_user_data_dir
preferences_path = File.join(user_data_dir, "Default", "Preferences")

FileUtils.mkdir_p(File.dirname(preferences_path))
File.write(preferences_path, JSON.generate(CHROME_PROFILE_PREFERENCES))
end

def with_page
page = create_page
yield(page)
Expand Down