Class: Puppeteer::Mouse

Inherits:
Object
  • Object
show all
Defined in:
lib/puppeteer/mouse.rb

Defined Under Namespace

Modules: Button

Instance Method Summary collapse

Constructor Details

#initialize(client, keyboard) ⇒ Mouse

Returns a new instance of Mouse.

Parameters:



13
14
15
16
17
18
19
20
# File 'lib/puppeteer/mouse.rb', line 13

def initialize(client, keyboard)
  @client = client
  @keyboard = keyboard

  @x = 0
  @y = 0
  @button = Button::NONE
end

Instance Method Details

#click(x, y, delay: nil, button: nil, click_count: nil) ⇒ Object

Parameters:

  • x (number)
  • y (number)
  • options (!{delay?: number, button?: "left"|"right"|"middle", clickCount?: number}=)


52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/puppeteer/mouse.rb', line 52

def click(x, y, delay: nil, button: nil, click_count: nil)
  # await_all(async_move, async_down, async_up) often breaks the order of CDP commands.
  # D, [2020-04-15T17:09:47.895895 #88683] DEBUG -- : RECV << {"id"=>23, "result"=>{"layoutViewport"=>{"pageX"=>0, "pageY"=>1, "clientWidth"=>375, "clientHeight"=>667}, "visualViewport"=>{"offsetX"=>0, "offsetY"=>0, "pageX"=>0, "pageY"=>1, "clientWidth"=>375, "clientHeight"=>667, "scale"=>1, "zoom"=>1}, "contentSize"=>{"x"=>0, "y"=>0, "width"=>375, "height"=>2007}}, "sessionId"=>"0B09EA5E18DEE403E525B3E7FCD7E225"}
  # D, [2020-04-15T17:09:47.898422 #88683] DEBUG -- : SEND >> {"sessionId":"0B09EA5E18DEE403E525B3E7FCD7E225","method":"Input.dispatchMouseEvent","params":{"type":"mouseReleased","button":"left","x":0,"y":0,"modifiers":0,"clickCount":1},"id":24}
  # D, [2020-04-15T17:09:47.899711 #88683] DEBUG -- : SEND >> {"sessionId":"0B09EA5E18DEE403E525B3E7FCD7E225","method":"Input.dispatchMouseEvent","params":{"type":"mousePressed","button":"left","x":0,"y":0,"modifiers":0,"clickCount":1},"id":25}
  # D, [2020-04-15T17:09:47.900237 #88683] DEBUG -- : SEND >> {"sessionId":"0B09EA5E18DEE403E525B3E7FCD7E225","method":"Input.dispatchMouseEvent","params":{"type":"mouseMoved","button":"left","x":187,"y":283,"modifiers":0},"id":26}
  # So we execute them sequential
  move(x, y)
  down(button: button, click_count: click_count)
  if delay
    sleep(delay / 1000.0)
  end
  up(button: button, click_count: click_count)
end

#down(button: nil, click_count: nil) ⇒ Object

Parameters:

  • options (!{button?: "left"|"right"|"middle", clickCount?: number}=)


70
71
72
73
74
75
76
77
78
79
80
# File 'lib/puppeteer/mouse.rb', line 70

def down(button: nil, click_count: nil)
  @button = button || Button::LEFT
  @client.send_message('Input.dispatchMouseEvent',
    type: 'mousePressed',
    button: @button,
    x: @x,
    y: @y,
    modifiers: @keyboard.modifiers,
    clickCount: click_count || 1,
  )
end

#move(x, y, steps: nil) ⇒ Object

Parameters:

  • x (number)
  • y (number)
  • steps (number) (defaults to: nil)


25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/puppeteer/mouse.rb', line 25

def move(x, y, steps: nil)
  move_steps = (steps || 1).to_i

  from_x = @x
  from_y = @y
  @x = x
  @y = y

  return if move_steps <= 0

  move_steps.times do |i|
    n = i + 1
    @client.send_message('Input.dispatchMouseEvent',
      type: 'mouseMoved',
      button: @button,
      x: from_x + (@x - from_x) * n / move_steps,
      y: from_y + (@y - from_y) * n / move_steps,
      modifiers: @keyboard.modifiers,
    )
  end
end

#up(button: nil, click_count: nil) ⇒ Object

Parameters:

  • options (!{button?: "left"|"right"|"middle", clickCount?: number}=)


85
86
87
88
89
90
91
92
93
94
95
# File 'lib/puppeteer/mouse.rb', line 85

def up(button: nil, click_count: nil)
  @button = Button::NONE
  @client.send_message('Input.dispatchMouseEvent',
    type: 'mouseReleased',
    button: button || Button::LEFT,
    x: @x,
    y: @y,
    modifiers: @keyboard.modifiers,
    clickCount: click_count || 1,
  )
end

#wheel(delta_x: 0, delta_y: 0) ⇒ Object

Dispatches a `mousewheel` event.

Parameters:

  • delta_x (Integer) (defaults to: 0)
  • delta_y (Integer) (defaults to: 0)


101
102
103
104
105
106
107
108
109
110
111
# File 'lib/puppeteer/mouse.rb', line 101

def wheel(delta_x: 0, delta_y: 0)
  @client.send_message('Input.dispatchMouseEvent',
    type: 'mouseWheel',
    x: @x,
    y: @y,
    deltaX: delta_x,
    deltaY: delta_y,
    modifiers: @keyboard.modifiers,
    pointerType: 'mouse',
  )
end