Class: Puppeteer::Launcher::Firefox

Inherits:
Base
  • Object
show all
Defined in:
lib/puppeteer/launcher/firefox.rb

Defined Under Namespace

Classes: DefaultArgs

Instance Method Summary collapse

Methods inherited from Base

#initialize, #resolve_executable_path

Constructor Details

This class inherits a constructor from Puppeteer::Launcher::Base

Instance Method Details

#connect(options = {}) ⇒ Puppeteer::Browser

Returns:



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/puppeteer/launcher/firefox.rb', line 73

def connect(options = {})
  @browser_options = BrowserOptions.new(options)
  browser_ws_endpoint = options[:browser_ws_endpoint]
  browser_url = options[:browser_url]
  transport = options[:transport]

  connection =
    if browser_ws_endpoint && browser_url.nil? && transport.nil?
      connect_with_browser_ws_endpoint(browser_ws_endpoint)
    elsif browser_ws_endpoint.nil? && browser_url && transport.nil?
      connect_with_browser_url(browser_url)
    elsif browser_ws_endpoint.nil? && browser_url.nil? && transport
      connect_with_transport(transport)
    else
      raise ArgumentError.new("Exactly one of browserWSEndpoint, browserURL or transport must be passed to puppeteer.connect")
    end

  result = connection.send_message('Target.getBrowserContexts')
  browser_context_ids = result['browserContextIds']

  Puppeteer::Browser.create(
    connection: connection,
    context_ids: browser_context_ids,
    ignore_https_errors: @browser_options.ignore_https_errors?,
    default_viewport: @browser_options.default_viewport,
    process: nil,
    close_callback: -> { connection.send_message('Browser.close') },
  )
end

#default_args(options = nil) ⇒ DefaultArgs

Returns:



175
176
177
# File 'lib/puppeteer/launcher/firefox.rb', line 175

def default_args(options = nil)
  DefaultArgs.new(ChromeArgOptions.new(options || {}))
end

#executable_pathstring

Returns:

  • (string)


126
127
128
# File 'lib/puppeteer/launcher/firefox.rb', line 126

def executable_path
  resolve_executable_path
end

#launch(options = {}) ⇒ !Promise<!Browser>

Parameters:

Returns:



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/puppeteer/launcher/firefox.rb', line 8

def launch(options = {})
  @chrome_arg_options = ChromeArgOptions.new(options)
  @launch_options = LaunchOptions.new(options)
  @browser_options = BrowserOptions.new(options)

  firefox_arguments =
    if !@launch_options.ignore_default_args
      default_args(options).to_a
    elsif @launch_options.ignore_default_args.is_a?(Enumerable)
      default_args(options).reject do |arg|
        @launch_options.ignore_default_args.include?(arg)
      end.to_a
    else
      @chrome_arg_options.args.dup
    end

  if firefox_arguments.none? { |arg| arg.start_with?('--remote-debugging-') }
    firefox_arguments << '--remote-debugging-port=0'
  end

  temporary_user_data_dir = nil
  if firefox_arguments.none? { |arg| arg.start_with?('--profile') || arg.start_with?('-profile') }
    temporary_user_data_dir = create_profile
    firefox_arguments << "--profile"
    firefox_arguments << temporary_user_data_dir
  end

  firefox_executable = @launch_options.executable_path || resolve_executable_path
  runner = Puppeteer::BrowserRunner.new(firefox_executable, firefox_arguments, temporary_user_data_dir)
  runner.start(
    handle_SIGHUP: @launch_options.handle_SIGHUP?,
    handle_SIGTERM: @launch_options.handle_SIGTERM?,
    handle_SIGINT: @launch_options.handle_SIGINT?,
    dumpio: @launch_options.dumpio?,
    env: @launch_options.env,
    pipe: @launch_options.pipe?,
  )

  begin
    connection = runner.setup_connection(
      use_pipe: @launch_options.pipe?,
      timeout: @launch_options.timeout,
      slow_mo: @browser_options.slow_mo,
      preferred_revision: @preferred_revision,
    )

    browser = Puppeteer::Browser.create(
      connection: connection,
      context_ids: [],
      ignore_https_errors: @browser_options.ignore_https_errors?,
      default_viewport: @browser_options.default_viewport,
      process: runner.proc,
      close_callback: -> { runner.close },
    )

    browser.wait_for_target(predicate: ->(target) { target.type == 'page' })

    browser
  rescue
    runner.kill
    raise
  end
end

#productObject



130
131
132
# File 'lib/puppeteer/launcher/firefox.rb', line 130

def product
  'firefox'
end