11#!/usr/bin/env ruby
2+ # typed: ignore
23# frozen_string_literal: true
34
45require "bundler/setup"
2324# bundle exec ruby examples/playwright_local_example.rb
2425
2526begin
26- require "playwright"
27+ require ( "playwright" )
2728rescue LoadError
28- warn "Playwright is not installed. Run: gem install playwright-ruby-client"
29- exit 1
29+ warn ( "Playwright is not installed. Run: gem install playwright-ruby-client" )
30+ exit ( 1 )
3031end
3132
3233DEBUG_PORT = 9222
@@ -74,6 +75,7 @@ def fetch_page_target_id(port, page_url)
7475 exit 1
7576end
7677
78+ # rubocop:disable Metrics/BlockLength
7779Playwright . create ( playwright_cli_executable_path : "./node_modules/.bin/playwright" ) do |playwright |
7880 browser = playwright . chromium . launch (
7981 headless : false ,
@@ -106,14 +108,14 @@ def fetch_page_target_id(port, page_url)
106108 }
107109 )
108110 session_id = start_response . data . session_id
109- puts "Session started: #{ session_id } "
111+ puts ( "Session started: #{ session_id } " )
110112
111113 observe_response = client . sessions . observe (
112114 session_id ,
113115 frame_id : page_target_id ,
114116 instruction : "Find all clickable links on this page"
115117 )
116- puts "Found #{ observe_response . data . result . length } possible actions"
118+ puts ( "Found #{ observe_response . data . result . length } possible actions" )
117119
118120 action = observe_response . data . result . first
119121 act_input = action ? action . to_h . merge ( method : "click" ) : "Click the 'Learn more' link"
@@ -122,7 +124,7 @@ def fetch_page_target_id(port, page_url)
122124 frame_id : page_target_id ,
123125 input : act_input
124126 )
125- puts "Act completed: #{ act_response . data . result [ :message ] } "
127+ puts ( "Act completed: #{ act_response . data . result [ :message ] } " )
126128
127129 extract_response = client . sessions . extract (
128130 session_id ,
@@ -131,12 +133,12 @@ def fetch_page_target_id(port, page_url)
131133 schema : {
132134 type : "object" ,
133135 properties : {
134- heading : { type : "string" } ,
135- links : { type : "array" , items : { type : "string" } }
136+ heading : { type : "string" } ,
137+ links : { type : "array" , items : { type : "string" } }
136138 }
137139 }
138140 )
139- puts "Extracted: #{ extract_response . data . result } "
141+ puts ( "Extracted: #{ extract_response . data . result } " )
140142
141143 execute_response = client . sessions . execute (
142144 session_id ,
@@ -146,22 +148,23 @@ def fetch_page_target_id(port, page_url)
146148 max_steps : 3
147149 } ,
148150 agent_config : {
149- model : Stagehand ::ModelConfig :: ModelConfigObject . new (
151+ model : Stagehand ::ModelConfig . new (
150152 model_name : "openai/gpt-5-nano" ,
151153 api_key : model_key
152154 ) ,
153155 cua : false
154156 }
155157 )
156- puts "Agent completed: #{ execute_response . data . result [ :message ] } "
157- puts "Agent success: #{ execute_response . data . result [ :success ] } "
158+ puts ( "Agent completed: #{ execute_response . data . result [ :message ] } " )
159+ puts ( "Agent success: #{ execute_response . data . result [ :success ] } " )
158160
159161 page . wait_for_load_state ( state : "domcontentloaded" )
160162 page . screenshot ( path : "screenshot_local_playwright.png" , fullPage : true )
161- puts "Screenshot saved to: screenshot_local_playwright.png"
163+ puts ( "Screenshot saved to: screenshot_local_playwright.png" )
162164 ensure
163165 client . sessions . end_ ( session_id ) if session_id
164166 client . close
165167 browser . close
166168 end
167169end
170+ # rubocop:enable Metrics/BlockLength
0 commit comments