browserclaw-agent 0.3.2 → 0.5.0
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/dist/agent-loop.d.ts.map +1 -1
- package/dist/agent-loop.js +68 -18
- package/dist/agent-loop.js.map +1 -1
- package/dist/llm.d.ts.map +1 -1
- package/dist/llm.js +46 -7
- package/dist/llm.js.map +1 -1
- package/dist/session-manager.d.ts.map +1 -1
- package/dist/session-manager.js +26 -18
- package/dist/session-manager.js.map +1 -1
- package/dist/skill-generator.d.ts.map +1 -1
- package/dist/skill-generator.js +31 -46
- package/dist/skill-generator.js.map +1 -1
- package/dist/skills/extract-items.d.ts.map +1 -1
- package/dist/skills/extract-items.js +50 -21
- package/dist/skills/extract-items.js.map +1 -1
- package/dist/skills/press-and-hold.d.ts +1 -0
- package/dist/skills/press-and-hold.d.ts.map +1 -1
- package/dist/skills/press-and-hold.js +73 -30
- package/dist/skills/press-and-hold.js.map +1 -1
- package/package.json +2 -2
|
@@ -7,7 +7,7 @@ const BLOCKED_PATTERNS = {
|
|
|
7
7
|
cloudflare_checkbox: /performing security verification|verify you are human|just a moment/i,
|
|
8
8
|
};
|
|
9
9
|
function humanHoldMs() {
|
|
10
|
-
return 4000 + Math.floor(Math.random() *
|
|
10
|
+
return 4000 + Math.floor(Math.random() * 6000); // 4-10 seconds
|
|
11
11
|
}
|
|
12
12
|
async function findButtonCoordinates(page) {
|
|
13
13
|
const result = await page.evaluate(`
|
|
@@ -114,21 +114,36 @@ export async function isStillBlocked(page, type) {
|
|
|
114
114
|
const result = await page.evaluate(`!!(document.body && document.body.innerText && document.body.innerText.match(${String(pattern)}))`);
|
|
115
115
|
return result === true;
|
|
116
116
|
}
|
|
117
|
+
export async function isIntermittentError(page) {
|
|
118
|
+
const text = await getPageText(page);
|
|
119
|
+
return /please try again/i.test(text);
|
|
120
|
+
}
|
|
121
|
+
const CHALLENGE_CLEAR_MAX_MS = 10_000;
|
|
122
|
+
const CHALLENGE_CLEAR_POLL_MS = 500;
|
|
123
|
+
async function waitForChallengeCleared(page, type) {
|
|
124
|
+
const deadline = Date.now() + CHALLENGE_CLEAR_MAX_MS;
|
|
125
|
+
while (Date.now() < deadline) {
|
|
126
|
+
if (!(await isStillBlocked(page, type)))
|
|
127
|
+
return true;
|
|
128
|
+
await page.waitFor({ timeMs: CHALLENGE_CLEAR_POLL_MS });
|
|
129
|
+
}
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
117
132
|
export function detectAntiBot(domText) {
|
|
118
133
|
// Check press-and-hold first — if DOM mentions press/hold, it's a press-and-hold challenge
|
|
119
134
|
// regardless of what the snapshot says
|
|
120
135
|
if (PRESS_HOLD_PATTERN.test(domText)) {
|
|
121
|
-
logger.info({ domTextPreview: domText.substring(0,
|
|
136
|
+
logger.info({ domTextPreview: domText.substring(0, 600) }, 'Anti-bot detected: press-and-hold');
|
|
122
137
|
return 'press_and_hold';
|
|
123
138
|
}
|
|
124
139
|
// Cloudflare-specific patterns (no press-and-hold in DOM text, already checked above)
|
|
125
140
|
if (CLOUDFLARE_PATTERN.test(domText)) {
|
|
126
|
-
logger.info({ domTextPreview: domText.substring(0,
|
|
141
|
+
logger.info({ domTextPreview: domText.substring(0, 600) }, 'Anti-bot detected: cloudflare checkbox');
|
|
127
142
|
return 'cloudflare_checkbox';
|
|
128
143
|
}
|
|
129
144
|
// Generic anti-bot (verify human, captcha, not a bot) — treat as cloudflare-style checkbox
|
|
130
145
|
if (ANTI_BOT_PATTERN.test(domText)) {
|
|
131
|
-
logger.info({ domTextPreview: domText.substring(0,
|
|
146
|
+
logger.info({ domTextPreview: domText.substring(0, 600) }, 'Anti-bot detected: generic');
|
|
132
147
|
return 'cloudflare_checkbox';
|
|
133
148
|
}
|
|
134
149
|
return null;
|
|
@@ -144,36 +159,64 @@ export function enrichSnapshot(snapshot, domText, type) {
|
|
|
144
159
|
}
|
|
145
160
|
return snapshot;
|
|
146
161
|
}
|
|
162
|
+
async function buttonIsInteractive(page, x, y) {
|
|
163
|
+
const result = await page.evaluate(`(function() {
|
|
164
|
+
var el = document.elementFromPoint(${String(x)}, ${String(y)});
|
|
165
|
+
if (!el) return false;
|
|
166
|
+
if (el.tagName === 'HTML' || el.tagName === 'BODY') return false;
|
|
167
|
+
var style = window.getComputedStyle(el);
|
|
168
|
+
if (style.pointerEvents === 'none') return false;
|
|
169
|
+
if (el.disabled === true) return false;
|
|
170
|
+
var text = (el.innerText || '').trim().toLowerCase();
|
|
171
|
+
if (/press|hold/.test(text)) return true;
|
|
172
|
+
var bg = style.backgroundColor || '';
|
|
173
|
+
var m = bg.match(/rgba?\\\((\\\d+),\\\s*(\\\d+),\\\s*(\\\d+)/);
|
|
174
|
+
if (m) {
|
|
175
|
+
var r = parseInt(m[1], 10), g = parseInt(m[2], 10), b = parseInt(m[3], 10);
|
|
176
|
+
var isNeutralGray = Math.abs(r - g) < 15 && Math.abs(g - b) < 15 && r > 180 && r < 245;
|
|
177
|
+
if (isNeutralGray) return false;
|
|
178
|
+
}
|
|
179
|
+
return true;
|
|
180
|
+
})()`);
|
|
181
|
+
return result === true;
|
|
182
|
+
}
|
|
183
|
+
const BUTTON_READY_MAX_MS = 5_000;
|
|
184
|
+
const BUTTON_READY_POLL_MS = 500;
|
|
185
|
+
async function waitForButtonReady(page, x, y) {
|
|
186
|
+
const deadline = Date.now() + BUTTON_READY_MAX_MS;
|
|
187
|
+
while (Date.now() < deadline) {
|
|
188
|
+
if (await buttonIsInteractive(page, x, y))
|
|
189
|
+
return true;
|
|
190
|
+
await page.waitFor({ timeMs: BUTTON_READY_POLL_MS });
|
|
191
|
+
}
|
|
192
|
+
return false;
|
|
193
|
+
}
|
|
194
|
+
const NETWORK_IDLE_TIMEOUT_MS = 6_000;
|
|
195
|
+
async function waitForNetworkIdle(page) {
|
|
196
|
+
try {
|
|
197
|
+
await page.waitFor({ loadState: 'networkidle', timeoutMs: NETWORK_IDLE_TIMEOUT_MS });
|
|
198
|
+
}
|
|
199
|
+
catch (err) {
|
|
200
|
+
logger.info({ err: err instanceof Error ? err.message : err }, 'press-and-hold: network did not idle');
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
async function issuePress(page, x, y, holdMs) {
|
|
204
|
+
const jitterX = x + Math.floor(Math.random() * 20) - 10;
|
|
205
|
+
const jitterY = y + Math.floor(Math.random() * 10) - 5;
|
|
206
|
+
const delay = 100 + Math.floor(Math.random() * 200);
|
|
207
|
+
logger.info({ x: jitterX, y: jitterY, holdMs, delay }, 'press-and-hold: pressing');
|
|
208
|
+
await page.pressAndHold(jitterX, jitterY, { delay, holdMs });
|
|
209
|
+
logger.info({ holdMs }, 'press-and-hold: released');
|
|
210
|
+
}
|
|
147
211
|
export async function pressAndHold(page, opts) {
|
|
148
212
|
try {
|
|
149
|
-
|
|
213
|
+
await waitForNetworkIdle(page);
|
|
150
214
|
const coords = await findButtonCoordinates(page);
|
|
151
|
-
if (!coords)
|
|
152
|
-
logger.info('press-and-hold: no suitable button found');
|
|
215
|
+
if (!coords)
|
|
153
216
|
return false;
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
const urlBefore = await page.url();
|
|
158
|
-
const jitterX = x + Math.floor(Math.random() * 20) - 10;
|
|
159
|
-
const jitterY = y + Math.floor(Math.random() * 10) - 5;
|
|
160
|
-
const holdMs = opts?.holdMs ?? humanHoldMs();
|
|
161
|
-
const delay = 100 + Math.floor(Math.random() * 200);
|
|
162
|
-
logger.info({ x: jitterX, y: jitterY, holdMs, delay }, 'press-and-hold: pressing');
|
|
163
|
-
await page.pressAndHold(jitterX, jitterY, { delay, holdMs });
|
|
164
|
-
logger.info({ holdMs }, 'press-and-hold: released');
|
|
165
|
-
await page.waitFor({ timeMs: 2000 });
|
|
166
|
-
const stillBlocked = await isStillBlocked(page, 'press_and_hold');
|
|
167
|
-
if (stillBlocked) {
|
|
168
|
-
logger.info('press-and-hold: still blocked, refreshing page');
|
|
169
|
-
await page.goto(urlBefore);
|
|
170
|
-
await page.waitFor({ timeMs: 3000 });
|
|
171
|
-
const blockedAfterRefresh = await isStillBlocked(page, 'press_and_hold');
|
|
172
|
-
logger.info({ blockedAfterRefresh }, 'press-and-hold: result after refresh');
|
|
173
|
-
return !blockedAfterRefresh;
|
|
174
|
-
}
|
|
175
|
-
logger.info('press-and-hold: resolved');
|
|
176
|
-
return true;
|
|
217
|
+
await waitForButtonReady(page, coords.x, coords.y);
|
|
218
|
+
await issuePress(page, coords.x, coords.y, opts?.holdMs ?? humanHoldMs());
|
|
219
|
+
return await waitForChallengeCleared(page, 'press_and_hold');
|
|
177
220
|
}
|
|
178
221
|
catch (err) {
|
|
179
222
|
logger.error({ err: err instanceof Error ? err.message : err }, 'press-and-hold: failed');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"press-and-hold.js","sourceRoot":"","sources":["../../src/skills/press-and-hold.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAItC,MAAM,kBAAkB,GAAG,gCAAgC,CAAC;AAC5D,MAAM,kBAAkB,GAAG,iFAAiF,CAAC;AAC7G,MAAM,gBAAgB,GAAG,8CAA8C,CAAC;AAExE,MAAM,gBAAgB,GAA6D;IACjF,cAAc,EAAE,qDAAqD;IACrE,mBAAmB,EAAE,sEAAsE;CAC5F,CAAC;AAEF,SAAS,WAAW;IAClB,OAAO,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,
|
|
1
|
+
{"version":3,"file":"press-and-hold.js","sourceRoot":"","sources":["../../src/skills/press-and-hold.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "browserclaw-agent",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "Browser automation agent loop powered by browserclaw",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"prepublishOnly": "npm run build && npm run test:pack"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"browserclaw": "^0.
|
|
31
|
+
"browserclaw": "^0.16.0",
|
|
32
32
|
"openai": "^4.80.0",
|
|
33
33
|
"pino": "^10.3.1"
|
|
34
34
|
},
|