@olib-ai/owl-browser-sdk 2.0.5 → 2.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +107 -0
- package/dist/extraction/content-cleaner.d.ts +40 -0
- package/dist/extraction/content-cleaner.d.ts.map +1 -0
- package/dist/extraction/content-cleaner.js +393 -0
- package/dist/extraction/content-cleaner.js.map +1 -0
- package/dist/extraction/extractor.d.ts +139 -0
- package/dist/extraction/extractor.d.ts.map +1 -0
- package/dist/extraction/extractor.js +212 -0
- package/dist/extraction/extractor.js.map +1 -0
- package/dist/extraction/html-processor.d.ts +75 -0
- package/dist/extraction/html-processor.d.ts.map +1 -0
- package/dist/extraction/html-processor.js +192 -0
- package/dist/extraction/html-processor.js.map +1 -0
- package/dist/extraction/index.d.ts +14 -0
- package/dist/extraction/index.d.ts.map +1 -0
- package/dist/extraction/index.js +19 -0
- package/dist/extraction/index.js.map +1 -0
- package/dist/extraction/list-extractor.d.ts +24 -0
- package/dist/extraction/list-extractor.d.ts.map +1 -0
- package/dist/extraction/list-extractor.js +303 -0
- package/dist/extraction/list-extractor.js.map +1 -0
- package/dist/extraction/meta-extractor.d.ts +40 -0
- package/dist/extraction/meta-extractor.d.ts.map +1 -0
- package/dist/extraction/meta-extractor.js +216 -0
- package/dist/extraction/meta-extractor.js.map +1 -0
- package/dist/extraction/pagination.d.ts +29 -0
- package/dist/extraction/pagination.d.ts.map +1 -0
- package/dist/extraction/pagination.js +323 -0
- package/dist/extraction/pagination.js.map +1 -0
- package/dist/extraction/pattern-detector.d.ts +16 -0
- package/dist/extraction/pattern-detector.d.ts.map +1 -0
- package/dist/extraction/pattern-detector.js +390 -0
- package/dist/extraction/pattern-detector.js.map +1 -0
- package/dist/extraction/scrape-session.d.ts +23 -0
- package/dist/extraction/scrape-session.d.ts.map +1 -0
- package/dist/extraction/scrape-session.js +192 -0
- package/dist/extraction/scrape-session.js.map +1 -0
- package/dist/extraction/selector-engine.d.ts +23 -0
- package/dist/extraction/selector-engine.d.ts.map +1 -0
- package/dist/extraction/selector-engine.js +127 -0
- package/dist/extraction/selector-engine.js.map +1 -0
- package/dist/extraction/table-extractor.d.ts +29 -0
- package/dist/extraction/table-extractor.d.ts.map +1 -0
- package/dist/extraction/table-extractor.js +282 -0
- package/dist/extraction/table-extractor.js.map +1 -0
- package/dist/extraction/transforms.d.ts +47 -0
- package/dist/extraction/transforms.d.ts.map +1 -0
- package/dist/extraction/transforms.js +277 -0
- package/dist/extraction/transforms.js.map +1 -0
- package/dist/extraction/types.d.ts +199 -0
- package/dist/extraction/types.d.ts.map +1 -0
- package/dist/extraction/types.js +5 -0
- package/dist/extraction/types.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/playwright/browser-type.d.ts +101 -0
- package/dist/playwright/browser-type.d.ts.map +1 -0
- package/dist/playwright/browser-type.js +134 -0
- package/dist/playwright/browser-type.js.map +1 -0
- package/dist/playwright/browser.d.ts +98 -0
- package/dist/playwright/browser.d.ts.map +1 -0
- package/dist/playwright/browser.js +229 -0
- package/dist/playwright/browser.js.map +1 -0
- package/dist/playwright/context.d.ts +211 -0
- package/dist/playwright/context.d.ts.map +1 -0
- package/dist/playwright/context.js +466 -0
- package/dist/playwright/context.js.map +1 -0
- package/dist/playwright/extractor.d.ts +108 -0
- package/dist/playwright/extractor.d.ts.map +1 -0
- package/dist/playwright/extractor.js +404 -0
- package/dist/playwright/extractor.js.map +1 -0
- package/dist/playwright/frame.d.ts +147 -0
- package/dist/playwright/frame.d.ts.map +1 -0
- package/dist/playwright/frame.js +492 -0
- package/dist/playwright/frame.js.map +1 -0
- package/dist/playwright/index.d.ts +163 -0
- package/dist/playwright/index.d.ts.map +1 -0
- package/dist/playwright/index.js +313 -0
- package/dist/playwright/index.js.map +1 -0
- package/dist/playwright/keyboard.d.ts +74 -0
- package/dist/playwright/keyboard.d.ts.map +1 -0
- package/dist/playwright/keyboard.js +187 -0
- package/dist/playwright/keyboard.js.map +1 -0
- package/dist/playwright/locator.d.ts +237 -0
- package/dist/playwright/locator.d.ts.map +1 -0
- package/dist/playwright/locator.js +646 -0
- package/dist/playwright/locator.js.map +1 -0
- package/dist/playwright/mouse.d.ts +82 -0
- package/dist/playwright/mouse.d.ts.map +1 -0
- package/dist/playwright/mouse.js +137 -0
- package/dist/playwright/mouse.js.map +1 -0
- package/dist/playwright/page-helpers.d.ts +261 -0
- package/dist/playwright/page-helpers.d.ts.map +1 -0
- package/dist/playwright/page-helpers.js +423 -0
- package/dist/playwright/page-helpers.js.map +1 -0
- package/dist/playwright/page.d.ts +566 -0
- package/dist/playwright/page.d.ts.map +1 -0
- package/dist/playwright/page.js +1476 -0
- package/dist/playwright/page.js.map +1 -0
- package/dist/playwright/response.d.ts +100 -0
- package/dist/playwright/response.d.ts.map +1 -0
- package/dist/playwright/response.js +194 -0
- package/dist/playwright/response.js.map +1 -0
- package/dist/playwright/types.d.ts +354 -0
- package/dist/playwright/types.d.ts.map +1 -0
- package/dist/playwright/types.js +8 -0
- package/dist/playwright/types.js.map +1 -0
- package/openapi.json +327 -35
- package/package.json +10 -1
|
@@ -0,0 +1,492 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Playwright-compatible Frame and FrameLocator classes for Owl Browser.
|
|
3
|
+
*
|
|
4
|
+
* Provides frame isolation support via browser_switch_to_frame /
|
|
5
|
+
* browser_switch_to_main_frame tools, wrapping that mechanism into
|
|
6
|
+
* Playwright's Frame and FrameLocator API surfaces.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Frame represents an iframe or the main frame of a page.
|
|
10
|
+
*
|
|
11
|
+
* Operations on a Frame are scoped to that frame's DOM.
|
|
12
|
+
* After switching to a frame, subsequent commands target that frame
|
|
13
|
+
* until switchToMain() is called.
|
|
14
|
+
*/
|
|
15
|
+
export class Frame {
|
|
16
|
+
_client;
|
|
17
|
+
_contextId;
|
|
18
|
+
_frameSelector;
|
|
19
|
+
_name;
|
|
20
|
+
_url;
|
|
21
|
+
_parentFrame;
|
|
22
|
+
_detached = false;
|
|
23
|
+
constructor(client, contextId, frameSelector, name, url, parentFrame) {
|
|
24
|
+
this._client = client;
|
|
25
|
+
this._contextId = contextId;
|
|
26
|
+
this._frameSelector = frameSelector;
|
|
27
|
+
this._name = name ?? (frameSelector === null ? 'main' : frameSelector);
|
|
28
|
+
this._url = url ?? '';
|
|
29
|
+
this._parentFrame = parentFrame ?? null;
|
|
30
|
+
}
|
|
31
|
+
/** Frame name attribute or generated identifier. */
|
|
32
|
+
name() {
|
|
33
|
+
return this._name;
|
|
34
|
+
}
|
|
35
|
+
/** Frame URL. */
|
|
36
|
+
url() {
|
|
37
|
+
return this._url;
|
|
38
|
+
}
|
|
39
|
+
/** Whether this is the main frame. */
|
|
40
|
+
isMainFrame() {
|
|
41
|
+
return this._frameSelector === null;
|
|
42
|
+
}
|
|
43
|
+
/** Whether the frame has been detached. */
|
|
44
|
+
isDetached() {
|
|
45
|
+
return this._detached;
|
|
46
|
+
}
|
|
47
|
+
/** Parent frame, or null for the main frame. */
|
|
48
|
+
parentFrame() {
|
|
49
|
+
return this._parentFrame;
|
|
50
|
+
}
|
|
51
|
+
/** Child frames. Returns empty array (requires runtime enumeration). */
|
|
52
|
+
childFrames() {
|
|
53
|
+
return [];
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Switch browser focus to this frame.
|
|
57
|
+
* Subsequent DOM operations will target this frame's document.
|
|
58
|
+
*/
|
|
59
|
+
async focus() {
|
|
60
|
+
if (this._frameSelector === null) {
|
|
61
|
+
await this._client.execute('browser_switch_to_main_frame', {
|
|
62
|
+
context_id: this._contextId,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
await this._client.execute('browser_switch_to_frame', {
|
|
67
|
+
context_id: this._contextId,
|
|
68
|
+
frame_selector: this._frameSelector,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Navigate this frame to a URL.
|
|
74
|
+
*
|
|
75
|
+
* @param url - Target URL
|
|
76
|
+
* @param options - Navigation options
|
|
77
|
+
*/
|
|
78
|
+
async goto(url, options) {
|
|
79
|
+
await this.focus();
|
|
80
|
+
const params = {
|
|
81
|
+
context_id: this._contextId,
|
|
82
|
+
url,
|
|
83
|
+
};
|
|
84
|
+
const waitUntil = mapWaitUntil(options?.waitUntil);
|
|
85
|
+
if (waitUntil) {
|
|
86
|
+
params['wait_until'] = waitUntil;
|
|
87
|
+
}
|
|
88
|
+
if (options?.timeout !== undefined) {
|
|
89
|
+
params['timeout'] = String(options.timeout);
|
|
90
|
+
}
|
|
91
|
+
await this._client.execute('browser_navigate', params);
|
|
92
|
+
}
|
|
93
|
+
/** Click an element within this frame. */
|
|
94
|
+
async click(selector, options) {
|
|
95
|
+
void options;
|
|
96
|
+
await this.focus();
|
|
97
|
+
await this._client.execute('browser_click', {
|
|
98
|
+
context_id: this._contextId,
|
|
99
|
+
selector,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
/** Fill an input within this frame. */
|
|
103
|
+
async fill(selector, value, options) {
|
|
104
|
+
void options;
|
|
105
|
+
await this.focus();
|
|
106
|
+
await this._client.execute('browser_clear_input', {
|
|
107
|
+
context_id: this._contextId,
|
|
108
|
+
selector,
|
|
109
|
+
});
|
|
110
|
+
await this._client.execute('browser_type', {
|
|
111
|
+
context_id: this._contextId,
|
|
112
|
+
selector,
|
|
113
|
+
text: value,
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
/** Type text into an input within this frame. */
|
|
117
|
+
async type(selector, text, options) {
|
|
118
|
+
void options;
|
|
119
|
+
await this.focus();
|
|
120
|
+
await this._client.execute('browser_type', {
|
|
121
|
+
context_id: this._contextId,
|
|
122
|
+
selector,
|
|
123
|
+
text,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
/** Check a checkbox within this frame. */
|
|
127
|
+
async check(selector, options) {
|
|
128
|
+
void options;
|
|
129
|
+
await this.focus();
|
|
130
|
+
const result = await this._client.execute('browser_is_checked', {
|
|
131
|
+
context_id: this._contextId,
|
|
132
|
+
selector,
|
|
133
|
+
});
|
|
134
|
+
const res = result;
|
|
135
|
+
if (res['error_code'] !== 'checked' && res['checked'] !== true) {
|
|
136
|
+
await this._client.execute('browser_click', {
|
|
137
|
+
context_id: this._contextId,
|
|
138
|
+
selector,
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/** Uncheck a checkbox within this frame. */
|
|
143
|
+
async uncheck(selector, options) {
|
|
144
|
+
void options;
|
|
145
|
+
await this.focus();
|
|
146
|
+
const result = await this._client.execute('browser_is_checked', {
|
|
147
|
+
context_id: this._contextId,
|
|
148
|
+
selector,
|
|
149
|
+
});
|
|
150
|
+
const res = result;
|
|
151
|
+
if (res['error_code'] === 'checked' || res['checked'] === true) {
|
|
152
|
+
await this._client.execute('browser_click', {
|
|
153
|
+
context_id: this._contextId,
|
|
154
|
+
selector,
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
/** Select an option from a dropdown within this frame. */
|
|
159
|
+
async selectOption(selector, values, options) {
|
|
160
|
+
void options;
|
|
161
|
+
await this.focus();
|
|
162
|
+
const value = extractSelectValue(values);
|
|
163
|
+
await this._client.execute('browser_pick', {
|
|
164
|
+
context_id: this._contextId,
|
|
165
|
+
selector,
|
|
166
|
+
value,
|
|
167
|
+
});
|
|
168
|
+
return [value];
|
|
169
|
+
}
|
|
170
|
+
/** Wait for a selector within this frame. */
|
|
171
|
+
async waitForSelector(selector, options) {
|
|
172
|
+
await this.focus();
|
|
173
|
+
const params = {
|
|
174
|
+
context_id: this._contextId,
|
|
175
|
+
selector,
|
|
176
|
+
};
|
|
177
|
+
if (options?.timeout !== undefined) {
|
|
178
|
+
params['timeout'] = options.timeout;
|
|
179
|
+
}
|
|
180
|
+
await this._client.execute('browser_wait_for_selector', params);
|
|
181
|
+
}
|
|
182
|
+
/** Extract text content of an element within this frame. */
|
|
183
|
+
async textContent(selector) {
|
|
184
|
+
await this.focus();
|
|
185
|
+
const result = await this._client.execute('browser_extract_text', {
|
|
186
|
+
context_id: this._contextId,
|
|
187
|
+
selector,
|
|
188
|
+
});
|
|
189
|
+
if (result === null || result === undefined)
|
|
190
|
+
return null;
|
|
191
|
+
if (typeof result === 'string')
|
|
192
|
+
return result;
|
|
193
|
+
const res = result;
|
|
194
|
+
return res['text'] ?? String(res['result'] ?? '');
|
|
195
|
+
}
|
|
196
|
+
/** Get inner HTML of an element within this frame. */
|
|
197
|
+
async innerHTML(selector) {
|
|
198
|
+
await this.focus();
|
|
199
|
+
const result = await this._client.execute('browser_get_html', {
|
|
200
|
+
context_id: this._contextId,
|
|
201
|
+
selector,
|
|
202
|
+
});
|
|
203
|
+
if (typeof result === 'string')
|
|
204
|
+
return result;
|
|
205
|
+
const res = result;
|
|
206
|
+
return String(res['html'] ?? res['result'] ?? '');
|
|
207
|
+
}
|
|
208
|
+
/** Get an attribute value from an element within this frame. */
|
|
209
|
+
async getAttribute(selector, name) {
|
|
210
|
+
await this.focus();
|
|
211
|
+
const result = await this._client.execute('browser_get_attribute', {
|
|
212
|
+
context_id: this._contextId,
|
|
213
|
+
selector,
|
|
214
|
+
attribute: name,
|
|
215
|
+
});
|
|
216
|
+
if (result === null || result === undefined)
|
|
217
|
+
return null;
|
|
218
|
+
if (typeof result === 'string')
|
|
219
|
+
return result;
|
|
220
|
+
const res = result;
|
|
221
|
+
const val = res['value'] ?? res['result'];
|
|
222
|
+
return val === undefined || val === null ? null : String(val);
|
|
223
|
+
}
|
|
224
|
+
/** Get bounding box of an element within this frame. */
|
|
225
|
+
async boundingBox(selector) {
|
|
226
|
+
await this.focus();
|
|
227
|
+
try {
|
|
228
|
+
const result = await this._client.execute('browser_get_bounding_box', {
|
|
229
|
+
context_id: this._contextId,
|
|
230
|
+
selector,
|
|
231
|
+
});
|
|
232
|
+
const res = result;
|
|
233
|
+
return {
|
|
234
|
+
x: Number(res['x'] ?? 0),
|
|
235
|
+
y: Number(res['y'] ?? 0),
|
|
236
|
+
width: Number(res['width'] ?? 0),
|
|
237
|
+
height: Number(res['height'] ?? 0),
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
catch {
|
|
241
|
+
return null;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
/** Evaluate JavaScript within this frame. */
|
|
245
|
+
async evaluate(pageFunction, arg) {
|
|
246
|
+
await this.focus();
|
|
247
|
+
const expression = typeof pageFunction === 'function'
|
|
248
|
+
? `(${pageFunction.toString()})(${arg !== undefined ? JSON.stringify(arg) : ''})`
|
|
249
|
+
: pageFunction;
|
|
250
|
+
const result = await this._client.execute('browser_evaluate', {
|
|
251
|
+
context_id: this._contextId,
|
|
252
|
+
expression,
|
|
253
|
+
});
|
|
254
|
+
return result;
|
|
255
|
+
}
|
|
256
|
+
/** Create a Locator scoped to this frame (returns Locator from page). */
|
|
257
|
+
locator(_selector) {
|
|
258
|
+
// Implemented in FrameLocator instead; Frame.locator defers to Page
|
|
259
|
+
throw new Error('Use page.frameLocator(selector).locator(selector) for frame-scoped locators');
|
|
260
|
+
}
|
|
261
|
+
/** Mark frame as detached. */
|
|
262
|
+
_markDetached() {
|
|
263
|
+
this._detached = true;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* FrameLocator provides a scoped interface for interacting with iframe content.
|
|
268
|
+
*
|
|
269
|
+
* Usage: page.frameLocator('#iframe').locator('#button').click()
|
|
270
|
+
*
|
|
271
|
+
* The FrameLocator switches to the target frame before each operation,
|
|
272
|
+
* then creates a Locator that operates within that frame context.
|
|
273
|
+
*/
|
|
274
|
+
export class FrameLocator {
|
|
275
|
+
_client;
|
|
276
|
+
_contextId;
|
|
277
|
+
_frameSelector;
|
|
278
|
+
_page;
|
|
279
|
+
constructor(client, contextId, frameSelector, page) {
|
|
280
|
+
this._client = client;
|
|
281
|
+
this._contextId = contextId;
|
|
282
|
+
this._frameSelector = frameSelector;
|
|
283
|
+
this._page = page;
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Create a Locator for an element inside this frame.
|
|
287
|
+
*
|
|
288
|
+
* The returned Locator will switch to this frame before executing operations.
|
|
289
|
+
*
|
|
290
|
+
* @param selector - CSS selector within the frame
|
|
291
|
+
* @returns A FrameScopedLocator that auto-switches to the iframe
|
|
292
|
+
*/
|
|
293
|
+
locator(selector) {
|
|
294
|
+
return new FrameScopedLocator(this._client, this._contextId, this._frameSelector, selector, this._page);
|
|
295
|
+
}
|
|
296
|
+
/** Create a nested FrameLocator for iframes inside this frame. */
|
|
297
|
+
frameLocator(selector) {
|
|
298
|
+
// For nested frames, combine selectors
|
|
299
|
+
return new FrameLocator(this._client, this._contextId, selector, this._page);
|
|
300
|
+
}
|
|
301
|
+
/** Return the first matching frame locator. */
|
|
302
|
+
first() {
|
|
303
|
+
return this;
|
|
304
|
+
}
|
|
305
|
+
/** Return the last matching frame locator. */
|
|
306
|
+
last() {
|
|
307
|
+
return this;
|
|
308
|
+
}
|
|
309
|
+
/** Return the nth matching frame locator. */
|
|
310
|
+
nth(_index) {
|
|
311
|
+
return this;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* A Locator that automatically switches to a specific frame before operations.
|
|
316
|
+
*/
|
|
317
|
+
export class FrameScopedLocator {
|
|
318
|
+
_client;
|
|
319
|
+
_contextId;
|
|
320
|
+
_frameSelector;
|
|
321
|
+
_selector;
|
|
322
|
+
_page;
|
|
323
|
+
constructor(client, contextId, frameSelector, selector, page) {
|
|
324
|
+
this._client = client;
|
|
325
|
+
this._contextId = contextId;
|
|
326
|
+
this._frameSelector = frameSelector;
|
|
327
|
+
this._selector = selector;
|
|
328
|
+
this._page = page;
|
|
329
|
+
}
|
|
330
|
+
async _switchToFrame() {
|
|
331
|
+
const result = await this._client.execute('browser_switch_to_frame', {
|
|
332
|
+
context_id: this._contextId,
|
|
333
|
+
frame_selector: this._frameSelector,
|
|
334
|
+
});
|
|
335
|
+
const res = result;
|
|
336
|
+
if (res['status'] === 'frame_switch_failed' || res['success'] === false) {
|
|
337
|
+
// The CSS selector was not recognized as a frame name/index.
|
|
338
|
+
// Resolve it by finding the iframe's index in the parent document.
|
|
339
|
+
const indexResult = await this._client.execute('browser_evaluate', {
|
|
340
|
+
context_id: this._contextId,
|
|
341
|
+
expression: `(() => {
|
|
342
|
+
const el = document.querySelector('${this._frameSelector.replace(/\\/g, '\\\\').replace(/'/g, "\\'")}');
|
|
343
|
+
if (!el || el.tagName !== 'IFRAME') return -1;
|
|
344
|
+
const iframes = document.querySelectorAll('iframe');
|
|
345
|
+
for (let i = 0; i < iframes.length; i++) {
|
|
346
|
+
if (iframes[i] === el) return i;
|
|
347
|
+
}
|
|
348
|
+
return -1;
|
|
349
|
+
})()`,
|
|
350
|
+
});
|
|
351
|
+
const idx = typeof indexResult === 'number' ? indexResult : -1;
|
|
352
|
+
if (idx < 0) {
|
|
353
|
+
throw new Error(`Frame not found: ${this._frameSelector}`);
|
|
354
|
+
}
|
|
355
|
+
await this._client.execute('browser_switch_to_frame', {
|
|
356
|
+
context_id: this._contextId,
|
|
357
|
+
frame_selector: String(idx),
|
|
358
|
+
});
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
async _switchToMain() {
|
|
362
|
+
await this._client.execute('browser_switch_to_main_frame', {
|
|
363
|
+
context_id: this._contextId,
|
|
364
|
+
});
|
|
365
|
+
}
|
|
366
|
+
/** Click the element inside the frame. */
|
|
367
|
+
async click() {
|
|
368
|
+
await this._switchToFrame();
|
|
369
|
+
await this._client.execute('browser_click', {
|
|
370
|
+
context_id: this._contextId,
|
|
371
|
+
selector: this._selector,
|
|
372
|
+
});
|
|
373
|
+
await this._switchToMain();
|
|
374
|
+
}
|
|
375
|
+
/** Fill the element inside the frame. */
|
|
376
|
+
async fill(value) {
|
|
377
|
+
await this._switchToFrame();
|
|
378
|
+
await this._client.execute('browser_clear_input', {
|
|
379
|
+
context_id: this._contextId,
|
|
380
|
+
selector: this._selector,
|
|
381
|
+
});
|
|
382
|
+
await this._client.execute('browser_type', {
|
|
383
|
+
context_id: this._contextId,
|
|
384
|
+
selector: this._selector,
|
|
385
|
+
text: value,
|
|
386
|
+
});
|
|
387
|
+
await this._switchToMain();
|
|
388
|
+
}
|
|
389
|
+
/** Type text into element inside the frame. */
|
|
390
|
+
async type(text) {
|
|
391
|
+
await this._switchToFrame();
|
|
392
|
+
await this._client.execute('browser_type', {
|
|
393
|
+
context_id: this._contextId,
|
|
394
|
+
selector: this._selector,
|
|
395
|
+
text,
|
|
396
|
+
});
|
|
397
|
+
await this._switchToMain();
|
|
398
|
+
}
|
|
399
|
+
/** Get text content of element inside the frame. */
|
|
400
|
+
async textContent() {
|
|
401
|
+
await this._switchToFrame();
|
|
402
|
+
try {
|
|
403
|
+
const result = await this._client.execute('browser_extract_text', {
|
|
404
|
+
context_id: this._contextId,
|
|
405
|
+
selector: this._selector,
|
|
406
|
+
});
|
|
407
|
+
if (result === null || result === undefined) {
|
|
408
|
+
await this._switchToMain();
|
|
409
|
+
return null;
|
|
410
|
+
}
|
|
411
|
+
if (typeof result === 'string') {
|
|
412
|
+
await this._switchToMain();
|
|
413
|
+
return result;
|
|
414
|
+
}
|
|
415
|
+
const res = result;
|
|
416
|
+
const text = res['text'] ?? String(res['result'] ?? '');
|
|
417
|
+
await this._switchToMain();
|
|
418
|
+
return text;
|
|
419
|
+
}
|
|
420
|
+
catch {
|
|
421
|
+
await this._switchToMain();
|
|
422
|
+
return null;
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
/** Check if element is visible inside the frame. */
|
|
426
|
+
async isVisible() {
|
|
427
|
+
await this._switchToFrame();
|
|
428
|
+
try {
|
|
429
|
+
const result = await this._client.execute('browser_is_visible', {
|
|
430
|
+
context_id: this._contextId,
|
|
431
|
+
selector: this._selector,
|
|
432
|
+
});
|
|
433
|
+
await this._switchToMain();
|
|
434
|
+
const res = result;
|
|
435
|
+
return res['error_code'] === 'visible' || res['visible'] === true;
|
|
436
|
+
}
|
|
437
|
+
catch {
|
|
438
|
+
await this._switchToMain();
|
|
439
|
+
return false;
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
/** Wait for element inside the frame. */
|
|
443
|
+
async waitFor(options) {
|
|
444
|
+
await this._switchToFrame();
|
|
445
|
+
const params = {
|
|
446
|
+
context_id: this._contextId,
|
|
447
|
+
selector: this._selector,
|
|
448
|
+
};
|
|
449
|
+
if (options?.timeout !== undefined) {
|
|
450
|
+
params['timeout'] = options.timeout;
|
|
451
|
+
}
|
|
452
|
+
await this._client.execute('browser_wait_for_selector', params);
|
|
453
|
+
await this._switchToMain();
|
|
454
|
+
}
|
|
455
|
+
/** Create a child locator within the frame. */
|
|
456
|
+
locator(selector) {
|
|
457
|
+
return new FrameScopedLocator(this._client, this._contextId, this._frameSelector, `${this._selector} ${selector}`, this._page);
|
|
458
|
+
}
|
|
459
|
+
toString() {
|
|
460
|
+
return `FrameScopedLocator(frame=${this._frameSelector}, ${this._selector})`;
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
/** Map Playwright waitUntil values to Owl Browser equivalents. */
|
|
464
|
+
function mapWaitUntil(value) {
|
|
465
|
+
switch (value) {
|
|
466
|
+
case 'load':
|
|
467
|
+
return 'load';
|
|
468
|
+
case 'domcontentloaded':
|
|
469
|
+
return 'domcontentloaded';
|
|
470
|
+
case 'networkidle':
|
|
471
|
+
return 'networkidle';
|
|
472
|
+
case 'commit':
|
|
473
|
+
return '';
|
|
474
|
+
default:
|
|
475
|
+
return 'load';
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
/** Extract a single option value from SelectOptionValue. */
|
|
479
|
+
function extractSelectValue(values) {
|
|
480
|
+
if (typeof values === 'string')
|
|
481
|
+
return values;
|
|
482
|
+
if (Array.isArray(values)) {
|
|
483
|
+
const first = values[0];
|
|
484
|
+
if (first === undefined)
|
|
485
|
+
return '';
|
|
486
|
+
if (typeof first === 'string')
|
|
487
|
+
return first;
|
|
488
|
+
return first.value ?? first.label ?? '';
|
|
489
|
+
}
|
|
490
|
+
return values.value ?? values.label ?? '';
|
|
491
|
+
}
|
|
492
|
+
//# sourceMappingURL=frame.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frame.js","sourceRoot":"","sources":["../../src/playwright/frame.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Playwright-compatible API for Owl Browser.
|
|
3
|
+
*
|
|
4
|
+
* This module provides a drop-in Playwright-style API that translates
|
|
5
|
+
* Playwright method calls into Owl Browser tool executions. Import
|
|
6
|
+
* `chromium` (or `firefox`/`webkit` aliases) and use `.connect()` to
|
|
7
|
+
* establish a connection to a running Owl Browser server.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* import { chromium } from '@olib-ai/owl-browser-sdk/playwright';
|
|
12
|
+
*
|
|
13
|
+
* const browser = await chromium.connect({
|
|
14
|
+
* wsEndpoint: 'http://localhost:8080',
|
|
15
|
+
* token: 'test-token',
|
|
16
|
+
* });
|
|
17
|
+
*
|
|
18
|
+
* const context = await browser.newContext({
|
|
19
|
+
* viewport: { width: 1280, height: 720 },
|
|
20
|
+
* locale: 'en-US',
|
|
21
|
+
* });
|
|
22
|
+
* const page = await context.newPage();
|
|
23
|
+
*
|
|
24
|
+
* await page.goto('https://example.com');
|
|
25
|
+
* await page.click('#submit');
|
|
26
|
+
* await page.fill('#email', 'user@example.com');
|
|
27
|
+
*
|
|
28
|
+
* // Network interception
|
|
29
|
+
* await page.route('**\/api/**', async route => {
|
|
30
|
+
* await route.fulfill({ status: 200, body: '{"mock": true}' });
|
|
31
|
+
* });
|
|
32
|
+
*
|
|
33
|
+
* // Locators
|
|
34
|
+
* await page.getByRole('button', { name: 'Submit' }).click();
|
|
35
|
+
* await page.getByText('Welcome').isVisible();
|
|
36
|
+
*
|
|
37
|
+
* const title = await page.title();
|
|
38
|
+
* console.log('Page title:', title);
|
|
39
|
+
*
|
|
40
|
+
* await page.screenshot({ path: 'screenshot.png' });
|
|
41
|
+
*
|
|
42
|
+
* await context.close();
|
|
43
|
+
* await browser.close();
|
|
44
|
+
* ```
|
|
45
|
+
*
|
|
46
|
+
* @packageDocumentation
|
|
47
|
+
*/
|
|
48
|
+
export { Browser } from './browser.js';
|
|
49
|
+
export { BrowserContext } from './context.js';
|
|
50
|
+
export { Page } from './page.js';
|
|
51
|
+
export type { ScrapeOptions } from './page.js';
|
|
52
|
+
export type { ExtractedRecord, FieldSpec, ObjectFieldSpec, MetaData, Transform } from './extractor.js';
|
|
53
|
+
export { queryAll, queryFirst, extractTable, extractMeta, extractStructuredData, countElements, } from './extractor.js';
|
|
54
|
+
export { Locator, NthLocator } from './locator.js';
|
|
55
|
+
export { Frame, FrameLocator, FrameScopedLocator } from './frame.js';
|
|
56
|
+
export { Keyboard } from './keyboard.js';
|
|
57
|
+
export { Mouse } from './mouse.js';
|
|
58
|
+
export { Response, Request } from './response.js';
|
|
59
|
+
export { BrowserType } from './browser-type.js';
|
|
60
|
+
export { Route, RouteRequest, Dialog, ConsoleMessage, Download, Video, } from './page-helpers.js';
|
|
61
|
+
export type { ViewportSize, Position, BoundingBox, GotoOptions, NavigationOptions, MouseButton, KeyboardModifier, ClickOptions, DblClickOptions, HoverOptions, FillOptions, TypeOptions, PressOptions, SelectOptionOptions, SelectOptionValue, CheckOptions, DragAndDropOptions, FocusOptions, SetInputFilesOptions, ScreenshotType, ScreenshotOptions, SetContentOptions, PDFOptions, WaitForSelectorState, WaitForSelectorOptions, WaitForFunctionOptions, WaitForURLOptions, WaitForLoadStateOptions, WaitForEventOptions, LoadState, LocatorWaitForOptions, LocatorFilterOptions, BrowserConnectOptions, LaunchOptions, Cookie, BrowserContextOptions, ProxySettings, Geolocation, ColorScheme, ReducedMotion, ForcedColors, RecordVideoOptions, RecordHarOptions, StorageState, RouteOptions, RouteFulfillOptions, EmulateMediaOptions, DeviceDescriptor, PageFunction, Serializable, } from './types.js';
|
|
62
|
+
export type { PageEventName, EventHandler, RouteEntry, } from './page-helpers.js';
|
|
63
|
+
import { BrowserType } from './browser-type.js';
|
|
64
|
+
/**
|
|
65
|
+
* Chromium browser type.
|
|
66
|
+
*
|
|
67
|
+
* Primary entry point for connecting to Owl Browser.
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```typescript
|
|
71
|
+
* const browser = await chromium.connect({
|
|
72
|
+
* wsEndpoint: 'http://localhost:8080',
|
|
73
|
+
* token: 'test-token',
|
|
74
|
+
* });
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
export declare const chromium: BrowserType;
|
|
78
|
+
/**
|
|
79
|
+
* Firefox browser type (alias for chromium).
|
|
80
|
+
*
|
|
81
|
+
* Owl Browser uses its own Chromium-based engine regardless of
|
|
82
|
+
* which browser type is used. This alias exists for Playwright
|
|
83
|
+
* code compatibility.
|
|
84
|
+
*/
|
|
85
|
+
export declare const firefox: BrowserType;
|
|
86
|
+
/**
|
|
87
|
+
* WebKit browser type (alias for chromium).
|
|
88
|
+
*
|
|
89
|
+
* Owl Browser uses its own Chromium-based engine regardless of
|
|
90
|
+
* which browser type is used. This alias exists for Playwright
|
|
91
|
+
* code compatibility.
|
|
92
|
+
*/
|
|
93
|
+
export declare const webkit: BrowserType;
|
|
94
|
+
import type { DeviceDescriptor } from './types.js';
|
|
95
|
+
/**
|
|
96
|
+
* Device descriptors for device emulation.
|
|
97
|
+
*
|
|
98
|
+
* Matches Playwright's `devices` dictionary for common mobile and
|
|
99
|
+
* tablet devices. Use with browser.newContext() to emulate a device.
|
|
100
|
+
*
|
|
101
|
+
* @example
|
|
102
|
+
* ```typescript
|
|
103
|
+
* import { chromium, devices } from '@olib-ai/owl-browser-sdk/playwright';
|
|
104
|
+
*
|
|
105
|
+
* const browser = await chromium.connect({ wsEndpoint: '...', token: '...' });
|
|
106
|
+
* const context = await browser.newContext({
|
|
107
|
+
* ...devices['iPhone 14'],
|
|
108
|
+
* });
|
|
109
|
+
* ```
|
|
110
|
+
*/
|
|
111
|
+
export declare const devices: Record<string, DeviceDescriptor>;
|
|
112
|
+
/**
|
|
113
|
+
* Selectors utility for registering custom selector engines.
|
|
114
|
+
*
|
|
115
|
+
* Provides a Playwright-compatible API for selector engine management.
|
|
116
|
+
* In Owl Browser, selectors are handled natively by the semantic matcher.
|
|
117
|
+
*/
|
|
118
|
+
export declare const selectors: {
|
|
119
|
+
/**
|
|
120
|
+
* Register a custom selector engine.
|
|
121
|
+
*
|
|
122
|
+
* Stub: Owl Browser uses its own semantic matching engine.
|
|
123
|
+
*
|
|
124
|
+
* @param name - Engine name
|
|
125
|
+
* @param script - Engine implementation
|
|
126
|
+
*/
|
|
127
|
+
register(name: string, script: {
|
|
128
|
+
path?: string;
|
|
129
|
+
content?: string;
|
|
130
|
+
} | string): Promise<void>;
|
|
131
|
+
};
|
|
132
|
+
export { OwlBrowserError, ConnectionError, AuthenticationError, ToolExecutionError, TimeoutError, } from '../errors.js';
|
|
133
|
+
/**
|
|
134
|
+
* Default export matching Playwright's module structure.
|
|
135
|
+
*
|
|
136
|
+
* @example
|
|
137
|
+
* ```typescript
|
|
138
|
+
* import playwright from '@olib-ai/owl-browser-sdk/playwright';
|
|
139
|
+
* const browser = await playwright.chromium.connect({ ... });
|
|
140
|
+
* ```
|
|
141
|
+
*/
|
|
142
|
+
declare const _default: {
|
|
143
|
+
chromium: BrowserType;
|
|
144
|
+
firefox: BrowserType;
|
|
145
|
+
webkit: BrowserType;
|
|
146
|
+
devices: Record<string, DeviceDescriptor>;
|
|
147
|
+
selectors: {
|
|
148
|
+
/**
|
|
149
|
+
* Register a custom selector engine.
|
|
150
|
+
*
|
|
151
|
+
* Stub: Owl Browser uses its own semantic matching engine.
|
|
152
|
+
*
|
|
153
|
+
* @param name - Engine name
|
|
154
|
+
* @param script - Engine implementation
|
|
155
|
+
*/
|
|
156
|
+
register(name: string, script: {
|
|
157
|
+
path?: string;
|
|
158
|
+
content?: string;
|
|
159
|
+
} | string): Promise<void>;
|
|
160
|
+
};
|
|
161
|
+
};
|
|
162
|
+
export default _default;
|
|
163
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/playwright/index.ts"],"names":[],"mappings":"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"}
|