1+ """ This file aims to demonstrate how to write custom commands in OpenWPM
2+
3+ Steps to have a custom command run as part of a CommandSequence
4+
5+ 1. Create a class that derives from BaseCommand
6+ 2. Implement the execute method
7+ 3. Append it to the CommandSequence
8+ 4. Execute the CommandSequence
9+
10+ """
11+ import logging
12+
13+ from tkinter import ttk
14+
15+ from openwpm .commands .types import BaseCommand
16+ from openwpm .config import BrowserParams , ManagerParams
17+ from openwpm .socket_interface import ClientSocket
18+
19+ from selenium .webdriver import Firefox
20+
21+
22+ def get_screen_resolution (driver ):
23+ return driver .execute_script ("return [screen.width, screen.height];" )
24+
25+
26+ class SetResolution (BaseCommand ):
27+ """ Sets the browser window resolution """
28+ def __init__ (self , width , height ) -> None :
29+ self .logger = logging .getLogger ("openwpm" )
30+ self .width = width
31+ self .height = height
32+
33+ def __repr__ (self ) -> str :
34+ return "SetResolution"
35+
36+ def execute (
37+ self ,
38+ driver : Firefox ,
39+ browser_params : BrowserParams ,
40+ manager_params : ManagerParams ,
41+ extension_socket : ClientSocket ,
42+ ):
43+
44+ self .logger .info (f"Setting window resolution to { self .width } x { self .height } " )
45+ driver .set_window_size (self .width , self .height )
46+
47+ resolution = get_screen_resolution (driver )
48+ if resolution [0 ] <= self .width or resolution [1 ] <= self .height :
49+ self .logger .warn (
50+ f"Browser window resolution ({ self .width } x { self .height } ) exceeds " +
51+ f"screen resolution ({ resolution [0 ]} x { resolution [1 ]} )" )
52+
53+
54+
55+ class SetPosition (BaseCommand ):
56+ """ Sets the browser window position """
57+ def __init__ (self , x , y ) -> None :
58+ self .logger = logging .getLogger ("openwpm" )
59+ self .x = x
60+ self .y = y
61+
62+ def __repr__ (self ) -> str :
63+ return "SetPosition"
64+
65+ def execute (
66+ self ,
67+ driver : Firefox ,
68+ browser_params : BrowserParams ,
69+ manager_params : ManagerParams ,
70+ extension_socket : ClientSocket ,
71+ ):
72+
73+ driver .set_window_position (self .x , self .y , windowHandle = 'current' )
0 commit comments