agent-screenplay 0.1.1 → 0.1.3
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 +28 -6
- package/assets/editor/index.html +25 -7
- package/dist/cli.js +2 -1
- package/dist/cli.js.map +1 -1
- package/dist/core.js +2 -14
- package/dist/core.js.map +1 -1
- package/dist/direct/plan.d.ts +2 -0
- package/dist/direct/plan.js +8 -0
- package/dist/direct/plan.js.map +1 -1
- package/dist/drivers/browser.d.ts +14 -0
- package/dist/drivers/browser.js +39 -1
- package/dist/drivers/browser.js.map +1 -1
- package/dist/drivers/web.d.ts +5 -0
- package/dist/drivers/web.js +68 -6
- package/dist/drivers/web.js.map +1 -1
- package/dist/editor/server.d.ts +18 -3
- package/dist/editor/server.js +27 -4
- package/dist/editor/server.js.map +1 -1
- package/dist/login.d.ts +9 -1
- package/dist/login.js +62 -29
- package/dist/login.js.map +1 -1
- package/dist/mcp/server.js +13 -3
- package/dist/mcp/server.js.map +1 -1
- package/dist/render/compose.d.ts +6 -2
- package/dist/render/compose.js +126 -18
- package/dist/render/compose.js.map +1 -1
- package/dist/render/presets.d.ts +20 -3
- package/dist/render/presets.js +30 -3
- package/dist/render/presets.js.map +1 -1
- package/dist/render/render.d.ts +5 -0
- package/dist/render/render.js +22 -4
- package/dist/render/render.js.map +1 -1
- package/dist/render/style.d.ts +12 -2
- package/dist/render/style.js +80 -3
- package/dist/render/style.js.map +1 -1
- package/dist/scenario/config.d.ts +9 -0
- package/dist/scenario/fingerprint.js +2 -2
- package/dist/scenario/fingerprint.js.map +1 -1
- package/dist/scenario/schema.d.ts +59 -3
- package/dist/scenario/schema.js +33 -9
- package/dist/scenario/schema.js.map +1 -1
- package/dist/scenario/target.js +2 -1
- package/dist/scenario/target.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/voice/audio.d.ts +6 -0
- package/dist/voice/audio.js +36 -0
- package/dist/voice/audio.js.map +1 -0
- package/dist/voice/cartesia.d.ts +5 -0
- package/dist/voice/cartesia.js +17 -6
- package/dist/voice/cartesia.js.map +1 -1
- package/dist/voice/elevenlabs.d.ts +8 -0
- package/dist/voice/elevenlabs.js +29 -0
- package/dist/voice/elevenlabs.js.map +1 -0
- package/dist/voice/narration.d.ts +16 -0
- package/dist/voice/narration.js +83 -0
- package/dist/voice/narration.js.map +1 -0
- package/package.json +1 -1
- package/schema/scenario.schema.json +90 -6
- package/skills/screenplay/SKILL.md +20 -11
package/README.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# Screenplay
|
|
2
2
|
|
|
3
|
+
https://github.com/user-attachments/assets/dd9898da-4900-4a91-8620-57a860c46093
|
|
4
|
+
|
|
3
5
|
**Screen Studio-quality screen recordings, made by your AI agent.**
|
|
4
6
|
|
|
5
7
|
Ask Claude Code, Codex, Cursor or any agent: *"Make a video that shows how human handoff works"*. The agent explores your app and writes a short **scenario**; Screenplay plays it in a browser (or a desktop app), films it, and edits the video like Screen Studio would: smooth cursor, automatic zooms that follow the action, click effects, callouts, spotlight, captions, title cards, and an optional voice-over.
|
|
@@ -16,7 +18,18 @@ npx agent-screenplay init
|
|
|
16
18
|
|
|
17
19
|
The npm package is `agent-screenplay`; installed globally (`npm i -g agent-screenplay`), its command is `screenplay`.
|
|
18
20
|
|
|
19
|
-
`init` downloads Chromium (once), adds the Screenplay MCP server to the agents it finds (Claude Code, Codex, Cursor), and installs the guide that teaches them to make good videos.
|
|
21
|
+
`init` downloads Chromium (once), adds the Screenplay MCP server to the agents it finds (Claude Code, Codex, Cursor), and installs the guide that teaches them to make good videos. Restart your agent after it.
|
|
22
|
+
|
|
23
|
+
## Use it
|
|
24
|
+
|
|
25
|
+
In **Claude Code**, type `/screenplay` and say what you want:
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
/screenplay Make a 30-second walkthrough of https://askli.co
|
|
29
|
+
/screenplay Film how to invite a teammate in our app, with a French voice-over
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
In **Codex, Cursor** or any agent with the MCP server, just ask: *"Make a screen recording of …"*. The agent explores the site, asks whether you want a voice-over, writes the scenario, films it, checks the storyboard and gives you the MP4. To change the look afterwards: `npx agent-screenplay style <scenario.json>`.
|
|
20
33
|
|
|
21
34
|
Without MCP, any agent that can run commands can use the CLI directly:
|
|
22
35
|
|
|
@@ -34,7 +47,7 @@ Requirements: Node 20+. ffmpeg and the drawing library ship with the package.
|
|
|
34
47
|
```json
|
|
35
48
|
{
|
|
36
49
|
"url": "https://app.example.com/inbox",
|
|
37
|
-
"style": { "background": "
|
|
50
|
+
"style": { "background": "dawn" },
|
|
38
51
|
"steps": [
|
|
39
52
|
{ "title": "Human handoff, in one click", "subtitle": "New in 2.4" },
|
|
40
53
|
{ "click": "text=Camille Laurent", "say": "When the AI agent gets stuck, the conversation lands in your inbox." },
|
|
@@ -51,7 +64,7 @@ Requirements: Node 20+. ffmpeg and the drawing library ship with the package.
|
|
|
51
64
|
- **Targets** name elements the way people see them: `text=…`, `role=button[name='…']`, `label=…`, `placeholder=…`, `testid=…`, `css=…` (web only), `at=x,y` (desktop apps without accessible elements only).
|
|
52
65
|
- **Actions**: `goto`, `click`, `type`, `press`, `hover`, `scroll`, `select`, `wait`, `pause`.
|
|
53
66
|
- **Direction**: `title` and `end` cards, `callout` (a bubble pointing at an element), `highlight` (spotlight), `zoomTo`, and on any step `say` (caption and voice), `zoom`, `hold`.
|
|
54
|
-
- **Style**: background preset (
|
|
67
|
+
- **Style**: background preset (soft light gradients: `dawn`, `iris`, `citrus`, `apricot`, `coral`, `blaze`, `cloud`, `glacier`, `tide`, `meadow`), your own gradient, a color or an image; padding, corner radius, shadow, the cursor (`arrow` by default, a rounded arrow in the accent color; `macos`, `dot`) and its click effect (`ripple` by default; `rays`, `confetti`, `sparkle`), maximum zoom, browser frame, accent color. See [Style](#style).
|
|
55
68
|
- **Output**: 1920×1080 at 30 fps by default; any size up to 4K, 24 to 60 fps, optional GIF.
|
|
56
69
|
|
|
57
70
|
The full format is the JSON schema in [`schema/scenario.schema.json`](schema/scenario.schema.json) (`npx agent-screenplay schema`), and the agent guide in [`skills/screenplay/SKILL.md`](skills/screenplay/SKILL.md). Examples are in [`examples/`](examples).
|
|
@@ -77,11 +90,14 @@ Set the look by eye: `npx agent-screenplay style demo.json` opens an editor in y
|
|
|
77
90
|
}
|
|
78
91
|
```
|
|
79
92
|
|
|
80
|
-
|
|
93
|
+
Title and end cards (`title` and `end` steps) are **off by default**: turn them on with `"cards": true`, or with the switch in the editor.
|
|
94
|
+
|
|
95
|
+
`background` is a preset name (`dawn` by default; earlier presets such as `aurora` or `ocean` still work), a color (`"#0f172a"`), an image path (relative to the file that sets it), or `{ "gradient": [2 to 4 colors], "angle": degrees }`.
|
|
81
96
|
|
|
82
97
|
## Signing in
|
|
83
98
|
|
|
84
|
-
- `npx agent-screenplay login https://app.example.com` opens a browser
|
|
99
|
+
- `npx agent-screenplay login https://app.example.com` opens a browser window: sign in, then **close the window**. The session is saved to `.screenplay/auth.json` (while you go, and when the window closes; Enter in the terminal works too). Use it with `"auth": { "storageState": ".screenplay/auth.json" }`. Keep that file out of git.
|
|
100
|
+
- **Bot checks** (Cloudflare's "Just a moment…"): Screenplay's browser presents itself as an ordinary Chrome, so the checks that need no person pass by themselves. When a site asks a person to prove they are human, `check` says so: run `login` on that site, pass the check in the window, close it, and set `auth.storageState`. Some sites ask again on every visit; those cannot be filmed automatically.
|
|
85
101
|
- Agents without a screen can sign in with steps: `{ "type": "${EMAIL}", "into": "label=Email" }`, `{ "type": "${PASSWORD}", "into": "label=Password", "secret": true }`. `${VAR}` is read from the environment; `secret` masks the text in captions and logs.
|
|
86
102
|
|
|
87
103
|
## Voice-over
|
|
@@ -92,7 +108,13 @@ Off by default. Turn it on per scenario:
|
|
|
92
108
|
"voice": { "enabled": true, "language": "fr" }
|
|
93
109
|
```
|
|
94
110
|
|
|
95
|
-
Each step's `say` is spoken
|
|
111
|
+
Each step's `say` is spoken, and the video waits for each sentence to finish, so the voice sets the pace. Three ways to get the voice:
|
|
112
|
+
|
|
113
|
+
- **[Cartesia](https://cartesia.ai)**: set `CARTESIA_API_KEY`.
|
|
114
|
+
- **[ElevenLabs](https://elevenlabs.io)**: set `ELEVENLABS_API_KEY`. When both keys are set, Cartesia is used unless `"provider": "elevenlabs"`.
|
|
115
|
+
- **Your own audio files**, with no key: give a step `"audio": "voice/02.mp3"` (MP3, WAV, M4A…), for instance lines you generated in ElevenLabs' or Cartesia's web app. The agent can write the narration for you, one line per step, ready to paste there. Adding audio needs no new filming: `render`.
|
|
116
|
+
|
|
117
|
+
Narration is cached: re-rendering with unchanged text costs nothing. `voice.id` picks another voice, `voice.speed` its pace. Without voice, `say` still shows as a caption.
|
|
96
118
|
|
|
97
119
|
## Desktop apps
|
|
98
120
|
|
package/assets/editor/index.html
CHANGED
|
@@ -246,6 +246,15 @@ kbd { font: 11px ui-monospace, Menlo, monospace; color: var(--faint); }
|
|
|
246
246
|
|
|
247
247
|
<div class="section">
|
|
248
248
|
<div class="row"><span>Shadow</span><button class="switch" id="shadow" role="switch" aria-label="Shadow"></button></div>
|
|
249
|
+
<div class="row" style="margin-top:16px"><span>Intro & outro cards</span><button class="switch" id="cards" role="switch" aria-label="Intro and outro cards"></button></div>
|
|
250
|
+
</div>
|
|
251
|
+
|
|
252
|
+
<div class="section">
|
|
253
|
+
<p class="label">Cursor</p>
|
|
254
|
+
<div class="seg" id="cursorKind"><span class="pill"></span><button data-k="arrow">Arrow</button><button data-k="macos">macOS</button><button data-k="dot">Dot</button></div>
|
|
255
|
+
<p class="label" style="margin-top:16px">Click</p>
|
|
256
|
+
<div class="seg" id="clickKind"><span class="pill"></span><button data-k="ripple">Ripple</button><button data-k="rays">Rays</button><button data-k="confetti">Confetti</button><button data-k="sparkle">Sparkle</button></div>
|
|
257
|
+
<p class="note on" style="display:block">Shown in the video: Render to see them.</p>
|
|
249
258
|
</div>
|
|
250
259
|
</div>
|
|
251
260
|
|
|
@@ -283,7 +292,7 @@ async function load() {
|
|
|
283
292
|
S = await (await api("/api/state")).json();
|
|
284
293
|
$("name").textContent = S.name;
|
|
285
294
|
const eff = { ...S.defaults, ...S.projectStyle, ...S.scenarioStyle };
|
|
286
|
-
style = { background: eff.background, padding: eff.padding, radius: eff.radius, shadow: eff.shadow };
|
|
295
|
+
style = { background: eff.background, padding: eff.padding, radius: eff.radius, shadow: eff.shadow, cards: eff.cards, cursor: eff.cursor, click: eff.click };
|
|
287
296
|
if (kindOf(style.background) === "image") imageRef = { path: style.background, from: S.scenarioStyle.background !== undefined ? "scenario" : "project" };
|
|
288
297
|
saved = JSON.stringify(style);
|
|
289
298
|
// A video that already has its own look keeps it; otherwise the look is for the whole project.
|
|
@@ -325,7 +334,9 @@ function meshCss(p, w, h) {
|
|
|
325
334
|
const layers = p.blobs.map((b) => `radial-gradient(circle ${b.r * side}px at ${b.x * w}px ${b.y * h}px, ${rgba(b.color, b.alpha)} 0%, ${rgba(b.color, b.alpha * 0.6)} 40%, ${rgba(b.color, 0)} 100%)`);
|
|
326
335
|
return [...layers.reverse(), p.base].join(", ");
|
|
327
336
|
}
|
|
328
|
-
function presetCss(p, w, h) {
|
|
337
|
+
function presetCss(p, w, h, name) {
|
|
338
|
+
// Glow presets are drawn by the renderer on the server: the preview is the video's own image.
|
|
339
|
+
if (p.kind === "glow") return `center / cover no-repeat url("/api/preset?t=${TOKEN}&name=${encodeURIComponent(name)}&w=${Math.round(w)}&h=${Math.round(h)}")`;
|
|
329
340
|
return p.kind === "mesh" ? meshCss(p, w, h) : `linear-gradient(${p.angle}deg, ${p.stops.join(", ")})`;
|
|
330
341
|
}
|
|
331
342
|
/* The grain tile: the renderer's seeded noise (mulberry32, seed 7), 128×128. */
|
|
@@ -345,7 +356,7 @@ const grainUrl = (() => {
|
|
|
345
356
|
function bgCss(bg) {
|
|
346
357
|
if (typeof bg === "object") return `linear-gradient(${bg.angle ?? 135}deg, ${bg.gradient.join(", ")})`;
|
|
347
358
|
const p = S.presets[bg];
|
|
348
|
-
if (p) return presetCss(p, S.output.width, S.output.height);
|
|
359
|
+
if (p) return presetCss(p, S.output.width, S.output.height, bg);
|
|
349
360
|
if (/^#/.test(bg)) return bg;
|
|
350
361
|
if (imageRef) return `url("/api/image?t=${TOKEN}&from=${imageRef.from}&path=${encodeURIComponent(imageRef.path)}")`;
|
|
351
362
|
return "#111";
|
|
@@ -363,8 +374,8 @@ function draw(initial) {
|
|
|
363
374
|
$(back).style.opacity = 1; $(front).style.opacity = 0; front = back; lastBg = css;
|
|
364
375
|
}
|
|
365
376
|
const preset = typeof style.background === "string" ? S.presets[style.background] : null;
|
|
366
|
-
// The light from the top left belongs to linear gradients
|
|
367
|
-
$("glow").style.opacity = kindOf(style.background) === "gradient" && !(preset && preset.kind
|
|
377
|
+
// The light from the top left belongs to linear gradients only.
|
|
378
|
+
$("glow").style.opacity = kindOf(style.background) === "gradient" && !(preset && preset.kind !== "linear") ? 1 : 0;
|
|
368
379
|
$("grain").style.backgroundImage = `url(${grainUrl})`;
|
|
369
380
|
// Same tile size as the renderer: 128 px, doubled at 4K.
|
|
370
381
|
const tile = 128 * Math.max(1, Math.round(S.output.height / 1080));
|
|
@@ -415,7 +426,7 @@ function buildSwatches() {
|
|
|
415
426
|
const b = document.createElement("button");
|
|
416
427
|
b.className = "sw"; b.dataset.v = name; b.title = name; b.setAttribute("aria-label", name);
|
|
417
428
|
// A swatch is the same mesh, drawn on a square.
|
|
418
|
-
b.style.background = presetCss(p,
|
|
429
|
+
b.style.background = presetCss(p, 120, 120, name);
|
|
419
430
|
b.onclick = () => { style.background = name; change(); };
|
|
420
431
|
pre.appendChild(b);
|
|
421
432
|
}
|
|
@@ -436,7 +447,7 @@ function currentStops() {
|
|
|
436
447
|
const bg = style.background;
|
|
437
448
|
if (typeof bg === "object") return { stops: bg.gradient, angle: bg.angle ?? 135 };
|
|
438
449
|
const p = S.presets[bg] || S.presets[S.defaults.background];
|
|
439
|
-
return { stops: p.colors, angle: p.kind === "linear" ? p.angle : 135 };
|
|
450
|
+
return { stops: p.colors, angle: p.kind === "linear" ? p.angle : p.kind === "glow" ? 90 + p.angle : 135 };
|
|
440
451
|
}
|
|
441
452
|
function customGradient() {
|
|
442
453
|
if (typeof style.background === "object") return style.background;
|
|
@@ -457,6 +468,10 @@ $("hex").onchange = (e) => { const v = e.target.value.trim(); if (/^#([0-9a-f]{3
|
|
|
457
468
|
$("pad").oninput = (e) => { live(); style.padding = +e.target.value; change(); };
|
|
458
469
|
$("rad").oninput = (e) => { live(); style.radius = +e.target.value; change(); };
|
|
459
470
|
$("shadow").onclick = () => { style.shadow = !style.shadow; change(); };
|
|
471
|
+
// Cards are not in the frame preview: the rendered video shows them.
|
|
472
|
+
$("cards").onclick = () => { style.cards = !style.cards; change(); };
|
|
473
|
+
$("cursorKind").querySelectorAll("button").forEach((b) => (b.onclick = () => { style.cursor = b.dataset.k; change(); }));
|
|
474
|
+
$("clickKind").querySelectorAll("button").forEach((b) => (b.onclick = () => { style.click = b.dataset.k; change(); }));
|
|
460
475
|
$("reset").onclick = () => {
|
|
461
476
|
style = { ...S.defaults };
|
|
462
477
|
setKind(kindOf(style.background), true);
|
|
@@ -528,6 +543,9 @@ function sync() {
|
|
|
528
543
|
$(id + "V").textContent = v + unit;
|
|
529
544
|
}
|
|
530
545
|
$("shadow").setAttribute("aria-checked", String(style.shadow));
|
|
546
|
+
$("cards").setAttribute("aria-checked", String(style.cards));
|
|
547
|
+
setSeg($("cursorKind"), style.cursor);
|
|
548
|
+
setSeg($("clickKind"), style.click);
|
|
531
549
|
$("reset").disabled = JSON.stringify(style) === JSON.stringify({ ...S.defaults });
|
|
532
550
|
// The recording keeps its shape: when it is not the video's, the background shows on two sides even with no padding.
|
|
533
551
|
const cap = S.capture || { width: 1440, height: 900 }, r = cap.width / cap.height, R = S.output.width / S.output.height;
|
package/dist/cli.js
CHANGED
|
@@ -36,6 +36,7 @@ program
|
|
|
36
36
|
log(` storyboard: ${r.storyboard}`);
|
|
37
37
|
if (r.gif)
|
|
38
38
|
log(` gif: ${r.gif}`);
|
|
39
|
+
log(`\nAdjust the look (background, padding, cards…): npx agent-screenplay style ${file}`);
|
|
39
40
|
}
|
|
40
41
|
}
|
|
41
42
|
catch (e) {
|
|
@@ -130,7 +131,7 @@ program
|
|
|
130
131
|
.command("login")
|
|
131
132
|
.argument("<url>", "page to sign in on")
|
|
132
133
|
.option("-o, --out <file>", "where to save the session", ".screenplay/auth.json")
|
|
133
|
-
.description("Open a browser to sign in once; the session is saved for scenarios (auth.storageState).")
|
|
134
|
+
.description("Open a browser to sign in once, or to pass a bot check (Cloudflare) by hand; close the window when done. The session is saved for scenarios (auth.storageState).")
|
|
134
135
|
.action(async (url, o) => {
|
|
135
136
|
try {
|
|
136
137
|
const file = await login(url, o.out, log);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAC9B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,wDAAwD,CAAC;KACrE,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;AAE9D,SAAS,IAAI,CAAC,CAAU;IACtB,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACvD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IACrC,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,YAAY,aAAa,CAAC;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IAC9H,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,QAAQ,CAAC,YAAY,EAAE,oBAAoB,CAAC;KAC5C,WAAW,CAAC,0DAA0D,CAAC;KACvE,MAAM,CAAC,YAAY,EAAE,qDAAqD,CAAC;KAC3E,MAAM,CAAC,OAAO,EAAE,kBAAkB,CAAC;KACnC,MAAM,CAAC,QAAQ,EAAE,0BAA0B,CAAC;KAC5C,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,CAAoD,EAAE,EAAE;IACnF,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACrE,IAAI,CAAC,CAAC,IAAI;YAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;aAC/C,CAAC;YACJ,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,qBAAqB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACtG,GAAG,CAAC,iBAAiB,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;YACrC,IAAI,CAAC,CAAC,GAAG;gBAAE,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/core.js
CHANGED
|
@@ -6,21 +6,9 @@ import { readingTime } from "./drivers/pace.js";
|
|
|
6
6
|
import { readTake, writeTake } from "./take.js";
|
|
7
7
|
import { captureInputs } from "./scenario/fingerprint.js";
|
|
8
8
|
import { renderTake } from "./render/render.js";
|
|
9
|
-
import {
|
|
9
|
+
import { narrate } from "./voice/narration.js";
|
|
10
10
|
async function narration(loaded, opts) {
|
|
11
|
-
|
|
12
|
-
if (!voice?.enabled || opts.noVoice)
|
|
13
|
-
return new Map();
|
|
14
|
-
const texts = new Map();
|
|
15
|
-
loaded.scenario.steps.forEach((s, i) => {
|
|
16
|
-
const say = s.say;
|
|
17
|
-
if (say)
|
|
18
|
-
texts.set(i, say);
|
|
19
|
-
});
|
|
20
|
-
if (texts.size === 0)
|
|
21
|
-
return new Map();
|
|
22
|
-
opts.log?.(`Generating narration for ${texts.size} step(s)`);
|
|
23
|
-
return synthesizeAll(texts, voice, path.join(loaded.workDir, "cache", "voice"));
|
|
11
|
+
return narrate(loaded, { noVoice: opts.noVoice, log: opts.log });
|
|
24
12
|
}
|
|
25
13
|
/** How long each step must last so its narration or caption can be heard or read. */
|
|
26
14
|
function minDurations(loaded, audio) {
|
package/dist/core.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAuB,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,MAAM,EAAoB,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAa,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAqB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAuB,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,MAAM,EAAoB,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAa,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAqB,MAAM,oBAAoB,CAAC;AAEnE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAgB/C,KAAK,UAAU,SAAS,CAAC,MAAsB,EAAE,IAAgB;IAC/D,OAAO,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACnE,CAAC;AAED,qFAAqF;AACrF,SAAS,YAAY,CAAC,MAAsB,EAAE,KAAwB;IACpE,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,IAAI,IAAI,CAAC;IACzD,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACxC,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACvB,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC;QAChC,MAAM,GAAG,GAAI,CAAsB,CAAC,GAAG,CAAC;QACxC,OAAO,GAAG,IAAI,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAY,EAAE,IAAI,GAAe,EAAE;IAC9D,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5C,IAAI,IAAU,CAAC;IACf,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAC/G,IAAI,GAAG,GAAG,CAAC,IAAK,CAAC;IACnB,CAAC;SAAM,CAAC;QACN,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAC5D,IAAI,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAChH,CAAC;IACD,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACjD,IAAI,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACvF,OAAO,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAY,EAAE,IAAI,GAAe,EAAE;IAC9D,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5C,OAAO,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;AACxG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,IAAY,EAAE,IAAI,GAAe,EAAE;IAC7D,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACnE,OAAO,GAAG,CAAC,KAAM,CAAC;IACpB,CAAC;IACD,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAC9D,OAAO,YAAY,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;IAClD,OAAO,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;AAC/D,CAAC"}
|
package/dist/direct/plan.d.ts
CHANGED
|
@@ -85,6 +85,8 @@ export interface PlanOptions {
|
|
|
85
85
|
autoZoom: boolean;
|
|
86
86
|
maxZoom: number;
|
|
87
87
|
captions: boolean;
|
|
88
|
+
/** Show the title and end cards (style.cards). When false they are left out of the video. */
|
|
89
|
+
cards?: boolean;
|
|
88
90
|
}
|
|
89
91
|
export declare const OVERLAY_DELAY = 0.55;
|
|
90
92
|
export declare function planTake(take: Take, scenario: Scenario, opts: PlanOptions): Plan;
|
package/dist/direct/plan.js
CHANGED
|
@@ -48,6 +48,14 @@ export function planTake(take, scenario, opts) {
|
|
|
48
48
|
const voice = [];
|
|
49
49
|
for (const st of steps) {
|
|
50
50
|
const audio = opts.audio.get(st.index);
|
|
51
|
+
if (st.card && opts.cards === false) {
|
|
52
|
+
// Cards are off: the step takes no time in the video. A video that started with one
|
|
53
|
+
// still drops the still lead-in recorded before it.
|
|
54
|
+
if (pieces.length === 0)
|
|
55
|
+
sp = st.start;
|
|
56
|
+
emitCapture(st.start);
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
51
59
|
if (st.card) {
|
|
52
60
|
// An opening card starts the video: drop the still lead-in recorded before it.
|
|
53
61
|
if (pieces.length === 0)
|
package/dist/direct/plan.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/direct/plan.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/direct/plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,4 +6,18 @@ export declare class BrowserNotFoundError extends Error {
|
|
|
6
6
|
export declare function launchBrowser(opts?: {
|
|
7
7
|
headless?: boolean;
|
|
8
8
|
}): Promise<Browser>;
|
|
9
|
+
/**
|
|
10
|
+
* The browser's user agent as a visible Chrome would send it. Headless Chromium announces itself
|
|
11
|
+
* as "HeadlessChrome", which bot checks such as Cloudflare's stop at once; the same browser with
|
|
12
|
+
* the ordinary name passes the checks that need no person (jeuxvideo.com, for one), and keeps a
|
|
13
|
+
* session saved by `login` (a visible browser) valid.
|
|
14
|
+
*/
|
|
15
|
+
export declare function realUserAgent(browser: Browser): Promise<string>;
|
|
16
|
+
/**
|
|
17
|
+
* A bot check that blocks the page (Cloudflare's "Just a moment…"), or undefined. Only Cloudflare's
|
|
18
|
+
* own check page counts, known by its title or its challenge elements. A Turnstile widget inside a
|
|
19
|
+
* usable page (a sign-in or contact form, however short) does not block anything, so a challenge
|
|
20
|
+
* frame alone is never taken for a block.
|
|
21
|
+
*/
|
|
22
|
+
export declare function botCheck(page: import("playwright-core").Page): Promise<string | undefined>;
|
|
9
23
|
export declare function isChromiumInstalled(): boolean;
|
package/dist/drivers/browser.js
CHANGED
|
@@ -8,7 +8,8 @@ export class BrowserNotFoundError extends Error {
|
|
|
8
8
|
/** Launch Chromium: SCREENPLAY_CHROME, then Playwright's Chromium, then an installed Google Chrome. */
|
|
9
9
|
export async function launchBrowser(opts = {}) {
|
|
10
10
|
const headless = opts.headless ?? true;
|
|
11
|
-
|
|
11
|
+
// Without the automation flag, pages see an ordinary browser (navigator.webdriver is false).
|
|
12
|
+
const args = ["--hide-scrollbars", "--disable-features=Translate", "--force-color-profile=srgb", "--disable-blink-features=AutomationControlled"];
|
|
12
13
|
const explicit = process.env.SCREENPLAY_CHROME;
|
|
13
14
|
if (explicit) {
|
|
14
15
|
if (!fs.existsSync(explicit))
|
|
@@ -33,6 +34,43 @@ export async function launchBrowser(opts = {}) {
|
|
|
33
34
|
}
|
|
34
35
|
throw new BrowserNotFoundError();
|
|
35
36
|
}
|
|
37
|
+
const userAgents = new WeakMap();
|
|
38
|
+
/**
|
|
39
|
+
* The browser's user agent as a visible Chrome would send it. Headless Chromium announces itself
|
|
40
|
+
* as "HeadlessChrome", which bot checks such as Cloudflare's stop at once; the same browser with
|
|
41
|
+
* the ordinary name passes the checks that need no person (jeuxvideo.com, for one), and keeps a
|
|
42
|
+
* session saved by `login` (a visible browser) valid.
|
|
43
|
+
*/
|
|
44
|
+
export async function realUserAgent(browser) {
|
|
45
|
+
const cached = userAgents.get(browser);
|
|
46
|
+
if (cached)
|
|
47
|
+
return cached;
|
|
48
|
+
const context = await browser.newContext();
|
|
49
|
+
try {
|
|
50
|
+
const page = await context.newPage();
|
|
51
|
+
const ua = (await page.evaluate(() => navigator.userAgent)).replace(/HeadlessChrome/g, "Chrome");
|
|
52
|
+
userAgents.set(browser, ua);
|
|
53
|
+
return ua;
|
|
54
|
+
}
|
|
55
|
+
finally {
|
|
56
|
+
await context.close();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* A bot check that blocks the page (Cloudflare's "Just a moment…"), or undefined. Only Cloudflare's
|
|
61
|
+
* own check page counts, known by its title or its challenge elements. A Turnstile widget inside a
|
|
62
|
+
* usable page (a sign-in or contact form, however short) does not block anything, so a challenge
|
|
63
|
+
* frame alone is never taken for a block.
|
|
64
|
+
*/
|
|
65
|
+
export async function botCheck(page) {
|
|
66
|
+
const title = await page.title().catch(() => "");
|
|
67
|
+
if (/^(just a moment|un instant|attention required|checking your browser|verify you are human)/i.test(title))
|
|
68
|
+
return title;
|
|
69
|
+
const blocked = await page
|
|
70
|
+
.evaluate(() => Boolean(document.querySelector("#challenge-form, #cf-challenge-running, #challenge-stage, #challenge-body-text")))
|
|
71
|
+
.catch(() => false);
|
|
72
|
+
return blocked ? title || "Cloudflare check" : undefined;
|
|
73
|
+
}
|
|
36
74
|
export function isChromiumInstalled() {
|
|
37
75
|
try {
|
|
38
76
|
return fs.existsSync(chromium.executablePath());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/drivers/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAgB,MAAM,iBAAiB,CAAC;AAEzD,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAC7C;QACE,KAAK,CACH,qKAAqK,CACtK,CAAC;IACJ,CAAC;CACF;AAED,uGAAuG;AACvG,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAI,GAA2B,EAAE;IACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC;IACvC,MAAM,IAAI,GAAG,CAAC,mBAAmB,EAAE,8BAA8B,EAAE,4BAA4B,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/drivers/browser.ts"],"names":[],"mappings":"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"}
|
package/dist/drivers/web.d.ts
CHANGED
|
@@ -44,6 +44,11 @@ export declare function runWeb(loaded: LoadedScenario, opts: WebRunOptions): Pro
|
|
|
44
44
|
take?: Take;
|
|
45
45
|
check?: CheckReport;
|
|
46
46
|
}>;
|
|
47
|
+
/**
|
|
48
|
+
* A pattern that matches the text whatever its apostrophes, quotes, dashes and spacing: pages write
|
|
49
|
+
* J’accepte with a typographic apostrophe, scenarios usually J'accepte.
|
|
50
|
+
*/
|
|
51
|
+
export declare function looseText(text: string): RegExp;
|
|
47
52
|
/** Find a visible element for a target, trying exact matches first. */
|
|
48
53
|
export declare function findLocator(page: Page, target: string, index: number, timeout?: number): Promise<Locator>;
|
|
49
54
|
export declare function sleep(ms: number): Promise<void>;
|
package/dist/drivers/web.js
CHANGED
|
@@ -2,7 +2,7 @@ import fs from "node:fs";
|
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { describeStep, stepKind } from "../scenario/schema.js";
|
|
4
4
|
import { parseTarget } from "../scenario/target.js";
|
|
5
|
-
import { launchBrowser } from "./browser.js";
|
|
5
|
+
import { botCheck, launchBrowser, realUserAgent } from "./browser.js";
|
|
6
6
|
import { cardDuration, travelDuration, typingDelays } from "./pace.js";
|
|
7
7
|
/**
|
|
8
8
|
* The browser size when the scenario sets none: the video's shape with a longer side of 1440
|
|
@@ -45,9 +45,10 @@ export async function runWeb(loaded, opts) {
|
|
|
45
45
|
try {
|
|
46
46
|
const storageState = scenario.auth?.storageState ? path.resolve(loaded.dir, scenario.auth.storageState) : undefined;
|
|
47
47
|
if (storageState && !fs.existsSync(storageState)) {
|
|
48
|
-
throw new Error(`Session file not found: ${storageState}. Run \`screenplay login <url>\` to create it.`);
|
|
48
|
+
throw new Error(`Session file not found: ${storageState}. Run \`npx agent-screenplay login <url>\` to create it.`);
|
|
49
49
|
}
|
|
50
50
|
context = await browser.newContext({
|
|
51
|
+
userAgent: await realUserAgent(browser),
|
|
51
52
|
viewport,
|
|
52
53
|
deviceScaleFactor: scale,
|
|
53
54
|
colorScheme: scenario.colorScheme,
|
|
@@ -73,6 +74,7 @@ export async function runWeb(loaded, opts) {
|
|
|
73
74
|
page.setDefaultTimeout(ACTION_TIMEOUT_MS);
|
|
74
75
|
log(`Opening ${baseUrl}`);
|
|
75
76
|
await page.goto(baseUrl, { waitUntil: "load", timeout: 60_000 });
|
|
77
|
+
await passBotCheck(page, baseUrl, Boolean(storageState));
|
|
76
78
|
await settle(page);
|
|
77
79
|
// ---- capture -------------------------------------------------------
|
|
78
80
|
const t0 = Date.now() / 1000;
|
|
@@ -254,6 +256,7 @@ async function runStep(page, step, ts, cursor, ctx) {
|
|
|
254
256
|
const url = new URL(s.goto, ctx.baseUrl).toString();
|
|
255
257
|
const w0 = now();
|
|
256
258
|
await page.goto(url, { waitUntil: "load", timeout: 60_000 });
|
|
259
|
+
await passBotCheck(page, url, false);
|
|
257
260
|
await settle(page);
|
|
258
261
|
ts.waits.push([w0, now()]);
|
|
259
262
|
return cursor;
|
|
@@ -466,28 +469,67 @@ async function settleAfterAction(page, ts, now, record) {
|
|
|
466
469
|
if (waited > 0.6)
|
|
467
470
|
ts.waits.push([w0, now()]);
|
|
468
471
|
}
|
|
472
|
+
/**
|
|
473
|
+
* Wait for a bot check (Cloudflare's "Just a moment…") to clear by itself, as most do; one that
|
|
474
|
+
* needs a person fails with what to do.
|
|
475
|
+
*/
|
|
476
|
+
async function passBotCheck(page, url, hasSession) {
|
|
477
|
+
const deadline = Date.now() + 20_000;
|
|
478
|
+
let check = await botCheck(page);
|
|
479
|
+
while (check && Date.now() < deadline) {
|
|
480
|
+
await page.waitForTimeout(1000);
|
|
481
|
+
check = await botCheck(page);
|
|
482
|
+
}
|
|
483
|
+
if (!check)
|
|
484
|
+
return;
|
|
485
|
+
throw new Error(`${new URL(url).host} shows a bot check ("${check}") that needs a person. ` +
|
|
486
|
+
(hasSession
|
|
487
|
+
? "The saved session no longer passes it: run `npx agent-screenplay login " + url + "` again, pass the check in the window, then close the window."
|
|
488
|
+
: "Run `npx agent-screenplay login " + url + '` (a person passes the check in the window, then closes it), then add "auth": { "storageState": ".screenplay/auth.json" } to the scenario.'));
|
|
489
|
+
}
|
|
469
490
|
async function settle(page) {
|
|
470
491
|
await page.waitForLoadState("networkidle", { timeout: 8_000 }).catch(() => { });
|
|
471
492
|
await page.evaluate(() => document.fonts?.ready).catch(() => { });
|
|
472
493
|
await sleep(250);
|
|
473
494
|
}
|
|
495
|
+
/**
|
|
496
|
+
* A pattern that matches the text whatever its apostrophes, quotes, dashes and spacing: pages write
|
|
497
|
+
* J’accepte with a typographic apostrophe, scenarios usually J'accepte.
|
|
498
|
+
*/
|
|
499
|
+
export function looseText(text) {
|
|
500
|
+
const esc = (c) => c.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
501
|
+
let src = "";
|
|
502
|
+
for (const ch of text.trim()) {
|
|
503
|
+
if (/['’‘ʼ`´]/.test(ch))
|
|
504
|
+
src += "['’‘ʼ`´]";
|
|
505
|
+
else if (/["“”«»„]/.test(ch))
|
|
506
|
+
src += '["“”«»„]';
|
|
507
|
+
else if (/[-–—]/.test(ch))
|
|
508
|
+
src += "[-–—]";
|
|
509
|
+
else if (/\s/.test(ch))
|
|
510
|
+
src += "\\s+";
|
|
511
|
+
else
|
|
512
|
+
src += esc(ch);
|
|
513
|
+
}
|
|
514
|
+
return new RegExp(src, "i");
|
|
515
|
+
}
|
|
474
516
|
/** Find a visible element for a target, trying exact matches first. */
|
|
475
517
|
export async function findLocator(page, target, index, timeout = ACTION_TIMEOUT_MS) {
|
|
476
518
|
const parsed = parseTarget(target);
|
|
477
519
|
const candidates = [];
|
|
478
520
|
switch (parsed.kind) {
|
|
479
521
|
case "text":
|
|
480
|
-
candidates.push(page.getByText(parsed.text, { exact: true }), page.getByText(parsed.text));
|
|
522
|
+
candidates.push(page.getByText(parsed.text, { exact: true }), page.getByText(parsed.text), page.getByText(looseText(parsed.text)));
|
|
481
523
|
break;
|
|
482
524
|
case "role":
|
|
483
525
|
if (parsed.name !== undefined) {
|
|
484
|
-
candidates.push(page.getByRole(parsed.role, { name: parsed.name, exact: true }), page.getByRole(parsed.role, { name: parsed.name }));
|
|
526
|
+
candidates.push(page.getByRole(parsed.role, { name: parsed.name, exact: true }), page.getByRole(parsed.role, { name: parsed.name }), page.getByRole(parsed.role, { name: looseText(parsed.name) }));
|
|
485
527
|
}
|
|
486
528
|
else
|
|
487
529
|
candidates.push(page.getByRole(parsed.role));
|
|
488
530
|
break;
|
|
489
531
|
case "label":
|
|
490
|
-
candidates.push(page.getByLabel(parsed.text, { exact: true }), page.getByLabel(parsed.text));
|
|
532
|
+
candidates.push(page.getByLabel(parsed.text, { exact: true }), page.getByLabel(parsed.text), page.getByLabel(looseText(parsed.text)));
|
|
491
533
|
break;
|
|
492
534
|
case "placeholder":
|
|
493
535
|
candidates.push(page.getByPlaceholder(parsed.text, { exact: true }), page.getByPlaceholder(parsed.text));
|
|
@@ -537,8 +579,28 @@ async function listCandidates(page) {
|
|
|
537
579
|
el.textContent?.trim() ??
|
|
538
580
|
"";
|
|
539
581
|
const name = label.replace(/\s+/g, " ").slice(0, 60);
|
|
540
|
-
if (!name)
|
|
582
|
+
if (!name) {
|
|
583
|
+
// No name in the page, yet a person may see one: text drawn by CSS (::before/::after),
|
|
584
|
+
// as some cookie walls do to resist blockers. Offer a css= target with what it shows.
|
|
585
|
+
if (r.bottom < 0 || r.top > window.innerHeight)
|
|
586
|
+
continue;
|
|
587
|
+
const drawn = [el, ...Array.from(el.querySelectorAll("*"))]
|
|
588
|
+
.flatMap((e) => ["::before", "::after"].map((p) => getComputedStyle(e, p).content))
|
|
589
|
+
.filter((c) => c && c !== "none" && c !== "normal")
|
|
590
|
+
.map((c) => c.replace(/^["']|["']$/g, ""))
|
|
591
|
+
.join(" ")
|
|
592
|
+
.trim();
|
|
593
|
+
const cls = Array.from(el.classList).find((c) => /^[a-z][\w-]*$/i.test(c) && document.getElementsByClassName(c).length === 1);
|
|
594
|
+
const sel = el.id ? `#${el.id}` : cls ? `${tag}.${cls}` : "";
|
|
595
|
+
if (!sel || !drawn)
|
|
596
|
+
continue;
|
|
597
|
+
const t = `css=${sel}`;
|
|
598
|
+
if (!seen.has(t)) {
|
|
599
|
+
seen.add(t);
|
|
600
|
+
out.push(`${t} (shows "${drawn.slice(0, 40)}")`);
|
|
601
|
+
}
|
|
541
602
|
continue;
|
|
603
|
+
}
|
|
542
604
|
const t = `role=${role}[name='${name.replace(/'/g, "\\'")}']`;
|
|
543
605
|
if (!seen.has(t)) {
|
|
544
606
|
seen.add(t);
|