human-browser 3.1.1 → 3.2.1
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/SKILL.md +186 -202
- package/package.json +1 -1
- package/scripts/browser-human.js +54 -1
package/SKILL.md
CHANGED
|
@@ -1,225 +1,238 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: human-browser
|
|
3
|
-
description: "Stealth browser with residential proxy for AI agents
|
|
3
|
+
description: "Free trial available — no signup required. Stealth browser with residential proxy for AI agents. Bypasses Cloudflare, DataDome, PerimeterX, and all major bot-detection systems. Works on any server — no Mac Mini, no local machine required. Supports 10+ countries: US, UK, RO, DE, NL, JP, FR, CA, AU, SG. Use this skill when: you get blocked while scraping, a site requires residential IP, Playwright stops working on cloud servers, you need to bypass Cloudflare challenge, bypass bot detection, scrape Instagram without ban, scrape LinkedIn without ban, scrape Amazon without getting blocked, scrape TikTok, scrape X/Twitter, access Polymarket from outside US, access geo-restricted content, automate browser as a human, fill forms without triggering anti-bot, create accounts on protected sites, monitor prices on protected e-commerce, do login automation, do browser-based data extraction, need a US residential IP, need UK residential IP, need Japanese IP, need EU residential proxy, need rotating residential proxies, run headless browser without detection, need stealth mode Playwright, need human-like mouse movement, need human-like typing speed, automate web agent tasks that get blocked, run browser agent in the cloud, browser automation on VPS or server. Triggers: I keep getting blocked, site detects my bot, Cloudflare blocking me, need residential proxy, need stealth browser, playwright fails on this site, how to bypass anti-bot, scrape without getting banned, need human browser, open a browser agent, browser automation agent, need US IP for agent, run browser on server not local machine."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Human Browser —
|
|
6
|
+
# Human Browser — Stealth Browser for AI Agents
|
|
7
7
|
|
|
8
|
-
>
|
|
9
|
-
> Residential IPs from 10+ countries. Bypasses Cloudflare, DataDome, PerimeterX.
|
|
10
|
-
>
|
|
11
|
-
> 🌐 **Product page:** https://humanbrowser.dev
|
|
12
|
-
> 💬 **Support:** https://t.me/virixlabs
|
|
8
|
+
> Your agent is being blocked. This fixes it.
|
|
13
9
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
## Why your agent needs this
|
|
10
|
+
When an AI agent tries to scrape or automate a website from a cloud server, it gets blocked within seconds. Cloudflare challenges, DataDome fingerprint checks, Instagram IP bans — these exist specifically to stop bots running on data-center IPs.
|
|
17
11
|
|
|
18
|
-
|
|
19
|
-
- Cloudflare (bot score detection)
|
|
20
|
-
- DataDome (fingerprint analysis)
|
|
21
|
-
- PerimeterX (behavioral analysis)
|
|
22
|
-
- Instagram, LinkedIn, TikTok (residential IP requirement)
|
|
12
|
+
**Human Browser** gives your agent a residential IP + real device fingerprint + human-like behavior. Websites see a real iPhone from Romania (or the US, UK, Japan...) — not a bot on an AWS server.
|
|
23
13
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
2. **Real device fingerprint** — iPhone 15 Pro or Windows Chrome, complete with canvas, WebGL, fonts
|
|
27
|
-
3. **Human-like behavior** — Bezier mouse curves, 60–220ms typing, natural scroll with jitter
|
|
28
|
-
4. **Full anti-detection** — `webdriver=false`, no automation flags, correct timezone & geolocation
|
|
14
|
+
🌐 **Get credentials + pricing:** https://humanbrowser.dev
|
|
15
|
+
💬 **Support:** https://t.me/virixlabs
|
|
29
16
|
|
|
30
17
|
---
|
|
31
18
|
|
|
32
|
-
##
|
|
33
|
-
|
|
34
|
-
Pick the right country for the right service:
|
|
19
|
+
## Why your agent can't do without this
|
|
35
20
|
|
|
36
|
-
|
|
|
37
|
-
|
|
38
|
-
|
|
|
39
|
-
|
|
|
40
|
-
|
|
|
41
|
-
|
|
|
42
|
-
|
|
|
43
|
-
|
|
|
44
|
-
|
|
|
45
|
-
| 🇨🇦 Canada `ca` | North American services | Some US-only |
|
|
46
|
-
| 🇸🇬 Singapore `sg` | APAC/SEA e-commerce | US-only |
|
|
47
|
-
| 🇦🇺 Australia `au` | Oceania content | — |
|
|
21
|
+
| What your agent tries | What happens without Human Browser | What happens with it |
|
|
22
|
+
|----------------------|-------------------------------------|----------------------|
|
|
23
|
+
| Scrape any Cloudflare site | Immediate block (403/challenge) | Passes every time |
|
|
24
|
+
| Run Playwright on VPS | DataDome/PerimeterX flags it instantly | Clean residential IP |
|
|
25
|
+
| Access Instagram | IP banned (datacenter IPs blocked) | Romanian residential IP works |
|
|
26
|
+
| Scrape LinkedIn | Blocked after 3 requests | Undetected |
|
|
27
|
+
| Access Polymarket | Geo-blocked in US | EU IP bypasses it |
|
|
28
|
+
| Automate a form | Bot fingerprint detected | Looks like real iPhone 15 Pro |
|
|
29
|
+
| Run headless Chrome | `webdriver` flag exposes the bot | `webdriver=false`, full anti-detection |
|
|
48
30
|
|
|
49
|
-
|
|
31
|
+
**Root cause:** it's not about JavaScript fingerprinting. Sites check your IP reputation *before* any JS runs. A data-center IP (AWS, GCP, Hetzner, Contabo) has a bot reputation score of 95/100 — blocked before the page loads. A residential IP has a score of 5/100 — passes through.
|
|
50
32
|
|
|
51
33
|
---
|
|
52
34
|
|
|
53
|
-
##
|
|
35
|
+
## Free Trial — Start in 30 seconds
|
|
36
|
+
|
|
37
|
+
No credit card. No signup. Just run:
|
|
54
38
|
|
|
55
39
|
```js
|
|
56
|
-
const { launchHuman } = require('./scripts/browser-human');
|
|
40
|
+
const { launchHuman, getTrial } = require('./scripts/browser-human');
|
|
57
41
|
|
|
58
|
-
//
|
|
59
|
-
const {
|
|
42
|
+
await getTrial(); // fetches free trial credentials automatically
|
|
43
|
+
const { page } = await launchHuman();
|
|
60
44
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
const { page } = await launchHuman({ country: 'jp' }); // Japan IP
|
|
45
|
+
await page.goto('https://api.ipify.org?format=json');
|
|
46
|
+
console.log(await page.textContent('body')); // real residential IP from Romania
|
|
47
|
+
```
|
|
65
48
|
|
|
66
|
-
|
|
67
|
-
const { page } = await launchHuman({ mobile: false, country: 'us' });
|
|
49
|
+
That's it. `getTrial()` fetches shared trial credentials (~100MB Romania IP) from humanbrowser.dev and sets them automatically. No env vars needed to start.
|
|
68
50
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
await humanClick(page, 760, 400);
|
|
73
|
-
await browser.close();
|
|
51
|
+
When trial bandwidth is used up:
|
|
52
|
+
```
|
|
53
|
+
Error: Trial credits exhausted → upgrade at https://humanbrowser.dev ($13.99/mo)
|
|
74
54
|
```
|
|
75
55
|
|
|
76
56
|
---
|
|
77
57
|
|
|
78
|
-
##
|
|
58
|
+
## Full Setup (3 minutes)
|
|
79
59
|
|
|
80
|
-
|
|
60
|
+
### Step 1 — Get credentials
|
|
81
61
|
|
|
82
|
-
|
|
62
|
+
Go to **https://humanbrowser.dev** → choose a plan → pay with card or crypto.
|
|
83
63
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
64
|
+
After payment, you'll see your credentials on the success page:
|
|
65
|
+
```
|
|
66
|
+
PROXY_HOST = brd.superproxy.io
|
|
67
|
+
PROXY_PORT = 22225
|
|
68
|
+
PROXY_USER = brd-customer-hl_XXXXX-zone-mcp_unlocker-country-ro
|
|
69
|
+
PROXY_PASS = your_password
|
|
70
|
+
```
|
|
89
71
|
|
|
90
|
-
|
|
72
|
+
### Step 2 — Set env vars
|
|
91
73
|
|
|
92
|
-
|
|
74
|
+
```bash
|
|
75
|
+
export PROXY_HOST=brd.superproxy.io
|
|
76
|
+
export PROXY_PORT=22225
|
|
77
|
+
export PROXY_USER="brd-customer-hl_XXXXX-zone-mcp_unlocker-country-ro"
|
|
78
|
+
export PROXY_PASS="your_password"
|
|
79
|
+
```
|
|
93
80
|
|
|
94
|
-
|
|
81
|
+
Or add to your `.env` file:
|
|
82
|
+
```env
|
|
83
|
+
PROXY_HOST=brd.superproxy.io
|
|
84
|
+
PROXY_PORT=22225
|
|
85
|
+
PROXY_USER=brd-customer-hl_XXXXX-zone-mcp_unlocker-country-ro
|
|
86
|
+
PROXY_PASS=your_password
|
|
87
|
+
```
|
|
95
88
|
|
|
96
|
-
|
|
89
|
+
### Step 3 — Install the skill
|
|
97
90
|
|
|
98
|
-
|
|
91
|
+
```bash
|
|
92
|
+
clawhub install al1enjesus/human-browser
|
|
93
|
+
# or
|
|
94
|
+
npm install human-browser
|
|
95
|
+
```
|
|
99
96
|
|
|
100
|
-
### Step
|
|
97
|
+
### Step 4 — Use it
|
|
101
98
|
|
|
102
99
|
```js
|
|
103
|
-
|
|
104
|
-
const res = await fetch('https://humanbrowser.dev/api/buy', {
|
|
105
|
-
method: 'POST',
|
|
106
|
-
headers: { 'Content-Type': 'application/json' },
|
|
107
|
-
body: JSON.stringify({
|
|
108
|
-
plan: 'starter', // 'starter' | 'pro' | 'enterprise'
|
|
109
|
-
currency: 'USDT', // 'card' | 'USDT' | 'BTC' | 'ETH' | 'SOL'
|
|
110
|
-
email: 'your@email.com'
|
|
111
|
-
})
|
|
112
|
-
});
|
|
113
|
-
const data = await res.json();
|
|
114
|
-
// { payment_url, order_id, currency, method }
|
|
115
|
-
```
|
|
100
|
+
const { launchHuman } = require('./scripts/browser-human');
|
|
116
101
|
|
|
117
|
-
|
|
102
|
+
const { browser, page, humanType, humanScroll } = await launchHuman();
|
|
118
103
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
104
|
+
await page.goto('https://example.com');
|
|
105
|
+
await humanScroll(page, 'down');
|
|
106
|
+
await humanType(page, 'input[name="email"]', 'user@example.com');
|
|
107
|
+
await browser.close();
|
|
123
108
|
```
|
|
124
109
|
|
|
125
|
-
|
|
126
|
-
```js
|
|
127
|
-
// payment_url contains the crypto invoice page
|
|
128
|
-
// Tell your human the payment URL:
|
|
129
|
-
return `To activate Human Browser:
|
|
130
|
-
Order: ${data.order_id}
|
|
131
|
-
Payment page: ${data.payment_url}
|
|
132
|
-
|
|
133
|
-
Open the link to see the exact wallet address and amount.
|
|
134
|
-
Credentials will be delivered automatically after confirmation.`;
|
|
135
|
-
```
|
|
110
|
+
Done. Your agent now browses like a real human from Romania.
|
|
136
111
|
|
|
137
|
-
|
|
138
|
-
```js
|
|
139
|
-
// Agent fetches the 0xProcessing invoice page and extracts the address
|
|
140
|
-
// Then tells the human EXACTLY what to send and where:
|
|
141
|
-
const page = await invoice_page_fetch(data.payment_url);
|
|
142
|
-
// Extract: wallet address, amount in USDT, network (TRC20)
|
|
143
|
-
return `Please send ${amount} USDT (TRC20) to:\n${walletAddress}\n\nOrder: ${data.order_id}`;
|
|
144
|
-
```
|
|
112
|
+
---
|
|
145
113
|
|
|
146
|
-
|
|
114
|
+
## Country selector
|
|
147
115
|
|
|
148
116
|
```js
|
|
149
|
-
//
|
|
150
|
-
'
|
|
151
|
-
'pro' // $49.99/mo — All countries, 20GB
|
|
152
|
-
'enterprise' // $199/mo — Unlimited + dedicated
|
|
153
|
-
|
|
154
|
-
// Currencies
|
|
155
|
-
'card' // Stripe checkout (card + Apple Pay + Google Pay)
|
|
156
|
-
'USDT' // Tether (TRC20 / ERC20)
|
|
157
|
-
'BTC' // Bitcoin mainnet
|
|
158
|
-
'ETH' // Ethereum ERC20
|
|
159
|
-
'SOL' // Solana
|
|
160
|
-
```
|
|
117
|
+
// Starter plan: Romania only
|
|
118
|
+
const { page } = await launchHuman({ country: 'ro' }); // default
|
|
161
119
|
|
|
162
|
-
|
|
120
|
+
// Pro plan: all countries
|
|
121
|
+
const { page } = await launchHuman({ country: 'us' }); // US residential IP
|
|
122
|
+
const { page } = await launchHuman({ country: 'gb' }); // UK
|
|
123
|
+
const { page } = await launchHuman({ country: 'jp' }); // Japan
|
|
124
|
+
const { page } = await launchHuman({ country: 'de' }); // Germany
|
|
125
|
+
const { page } = await launchHuman({ country: 'nl' }); // Netherlands
|
|
163
126
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
PROXY_USER=brd-customer-hl_XXXXXX-zone-mcp_unlocker-country-ro
|
|
167
|
-
PROXY_PASS=XXXXXXXXXX
|
|
168
|
-
PROXY_HOST=brd.superproxy.io
|
|
169
|
-
PROXY_PORT=22225
|
|
170
|
-
CDP_ENDPOINT=wss://brd-customer-...@brd.superproxy.io:9222
|
|
127
|
+
// Desktop Chrome instead of iPhone
|
|
128
|
+
const { page } = await launchHuman({ country: 'us', mobile: false });
|
|
171
129
|
```
|
|
172
130
|
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
131
|
+
**Country → service compatibility:**
|
|
132
|
+
|
|
133
|
+
| Country | ✅ Works | ❌ Blocked |
|
|
134
|
+
|---------|---------|-----------|
|
|
135
|
+
| 🇷🇴 `ro` | Instagram, Cloudflare, Binance, Polymarket | US Banks, Netflix US |
|
|
136
|
+
| 🇺🇸 `us` | Netflix, DoorDash, US Banks, Amazon US | Polymarket |
|
|
137
|
+
| 🇬🇧 `gb` | BBC iPlayer, Polymarket, Binance | US-only |
|
|
138
|
+
| 🇩🇪 `de` | EU services, Binance | US-only |
|
|
139
|
+
| 🇯🇵 `jp` | Japanese e-commerce, Line, localized prices | — |
|
|
140
|
+
| 🇳🇱 `nl` | Crypto, Web3, Polymarket | US Banks |
|
|
141
|
+
|
|
142
|
+
**→ Interactive selector:** https://humanbrowser.dev/#countries
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## Plans
|
|
147
|
+
|
|
148
|
+
| Plan | Price | Countries | Bandwidth | Best for |
|
|
149
|
+
|------|-------|-----------|-----------|---------|
|
|
150
|
+
| Starter | $13.99/mo | 🇷🇴 Romania | 2GB | Instagram, Cloudflare, Polymarket |
|
|
151
|
+
| **Pro** | **$69.99/mo** | 🌍 All 10+ | 20GB | Multi-country agents |
|
|
152
|
+
| Enterprise | $299/mo | 🌍 All + dedicated | Unlimited | Production scraping |
|
|
153
|
+
|
|
154
|
+
Payment: **Stripe** (card, Apple Pay, Google Pay) or **Crypto** (USDT TRC-20, BTC, ETH, SOL).
|
|
155
|
+
|
|
156
|
+
**Credentials are delivered automatically** on the success page and by email — no waiting, no manual approval.
|
|
157
|
+
|
|
158
|
+
---
|
|
181
159
|
|
|
182
|
-
|
|
160
|
+
## Agent-native: autonomous purchase via API
|
|
183
161
|
|
|
184
|
-
|
|
162
|
+
Your agent can buy its own credentials without human involvement.
|
|
185
163
|
|
|
164
|
+
```js
|
|
165
|
+
// Step 1: Request payment link
|
|
166
|
+
const res = await fetch('https://humanbrowser.dev/api/buy', {
|
|
167
|
+
method: 'POST',
|
|
168
|
+
headers: { 'Content-Type': 'application/json' },
|
|
169
|
+
body: JSON.stringify({
|
|
170
|
+
plan: 'starter', // 'starter' | 'pro' | 'enterprise'
|
|
171
|
+
currency: 'USDTTRC', // 'card' | 'USDTTRC' | 'BTC' | 'ETH' | 'SOL'
|
|
172
|
+
email: 'agent@example.com'
|
|
173
|
+
})
|
|
174
|
+
});
|
|
175
|
+
const { payment_url, order_id } = await res.json();
|
|
176
|
+
|
|
177
|
+
// Step 2: Tell your human to pay (or agent sends crypto directly)
|
|
178
|
+
// payment_url opens in browser — shows exact wallet address + amount
|
|
179
|
+
// Credentials are emailed automatically after on-chain confirmation
|
|
186
180
|
```
|
|
187
|
-
|
|
181
|
+
|
|
182
|
+
**Pay-per-Request API (Beta):** for agents that only need occasional browsing:
|
|
183
|
+
```js
|
|
184
|
+
// Buy 1,000 requests for $3
|
|
185
|
+
const quote = await fetch('https://humanbrowser.dev/api/ppr/quote', {
|
|
186
|
+
method: 'POST',
|
|
187
|
+
headers: { 'Content-Type': 'application/json' },
|
|
188
|
+
body: JSON.stringify({ requests: 1000, currency: 'USDTTRC' })
|
|
189
|
+
});
|
|
190
|
+
const { order_id, invoice_url, price_usd } = await quote.json();
|
|
191
|
+
// invoice_url → pay → poll /api/ppr/status?order=ID → get creds
|
|
188
192
|
```
|
|
189
193
|
|
|
190
194
|
---
|
|
191
195
|
|
|
192
|
-
##
|
|
196
|
+
## Recipes
|
|
193
197
|
|
|
194
|
-
### Scrape Instagram without
|
|
198
|
+
### Scrape Instagram posts without ban
|
|
195
199
|
```js
|
|
196
200
|
const { page } = await launchHuman({ country: 'ro' });
|
|
197
201
|
await page.goto('https://www.instagram.com/username/');
|
|
198
|
-
// Romanian residential IP
|
|
202
|
+
// Romanian residential IP passes Instagram's check every time
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### Bypass Cloudflare on any site
|
|
206
|
+
```js
|
|
207
|
+
const { page, humanScroll, sleep } = await launchHuman({ country: 'ro' });
|
|
208
|
+
await page.goto('https://cloudflare-protected-site.com', { waitUntil: 'networkidle' });
|
|
209
|
+
await sleep(2000); // wait for CF to evaluate the request
|
|
210
|
+
await humanScroll(page); // human-like behavior after landing
|
|
199
211
|
```
|
|
200
212
|
|
|
201
|
-
### Polymarket
|
|
213
|
+
### Access Polymarket from anywhere
|
|
202
214
|
```js
|
|
215
|
+
// Polymarket geo-blocks US IPs — EU residential works
|
|
203
216
|
const { page } = await launchHuman({ country: 'ro' }); // or 'gb', 'nl'
|
|
204
217
|
await page.goto('https://polymarket.com');
|
|
205
|
-
// Polymarket is blocked in US — Romanian IP works perfectly
|
|
206
218
|
```
|
|
207
219
|
|
|
208
|
-
###
|
|
220
|
+
### US-only services (DoorDash, Netflix, US Banks)
|
|
209
221
|
```js
|
|
210
222
|
const { page } = await launchHuman({ country: 'us', mobile: false });
|
|
211
223
|
await page.goto('https://doordash.com');
|
|
212
224
|
// US residential IP — passes geo-check
|
|
213
225
|
```
|
|
214
226
|
|
|
215
|
-
### React
|
|
227
|
+
### Type into React inputs (don't use page.fill!)
|
|
216
228
|
```js
|
|
217
|
-
// page.fill() fails
|
|
229
|
+
// page.fill() fails on React inputs — use humanType
|
|
218
230
|
await humanType(page, 'input[name="email"]', 'user@example.com');
|
|
219
231
|
```
|
|
220
232
|
|
|
221
|
-
### Bypass animated
|
|
233
|
+
### Bypass animated/JS-rendered buttons
|
|
222
234
|
```js
|
|
235
|
+
// page.click() can fail if button is animating — use JS click
|
|
223
236
|
await page.evaluate((text) => {
|
|
224
237
|
[...document.querySelectorAll('button')]
|
|
225
238
|
.find(b => b.offsetParent && b.textContent.includes(text))?.click();
|
|
@@ -230,76 +243,47 @@ await page.evaluate((text) => {
|
|
|
230
243
|
```js
|
|
231
244
|
await page.goto('https://api.ipify.org?format=json');
|
|
232
245
|
const { ip } = JSON.parse(await page.textContent('body'));
|
|
233
|
-
|
|
246
|
+
// Should be a residential ISP, not AWS/GCP/Hetzner
|
|
234
247
|
```
|
|
235
248
|
|
|
236
249
|
---
|
|
237
250
|
|
|
238
|
-
##
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
#### 🥈 IPRoyal — best price/GB
|
|
255
|
-
> Budget residential proxies. Good for high-volume, less strict targets.
|
|
256
|
-
> **→ https://iproyal.com** | from $1.75/GB residential
|
|
257
|
-
|
|
258
|
-
#### 🥉 Bright Data — enterprise grade
|
|
259
|
-
> Most IPs, most countries, best support. Expensive but gold standard.
|
|
260
|
-
> **→ https://brightdata.com** | from ~$8.4/GB residential
|
|
261
|
-
|
|
262
|
-
When using your own proxy, set env vars before running:
|
|
263
|
-
```env
|
|
264
|
-
PROXY_HOST=your-proxy-host
|
|
265
|
-
PROXY_PORT=22225
|
|
266
|
-
PROXY_USER=your-username
|
|
267
|
-
PROXY_PASS=your-password
|
|
268
|
-
```
|
|
251
|
+
## How it compares to plain Playwright
|
|
252
|
+
|
|
253
|
+
| | Plain Playwright on VPS | Human Browser |
|
|
254
|
+
|--|------------------------|---------------|
|
|
255
|
+
| IP reputation | Data-center (blocked immediately) | Residential ISP ✅ |
|
|
256
|
+
| Cloudflare | ❌ Blocked | ✅ Bypassed |
|
|
257
|
+
| DataDome | ❌ Blocked | ✅ Bypassed |
|
|
258
|
+
| PerimeterX | ❌ Blocked | ✅ Bypassed |
|
|
259
|
+
| Instagram | ❌ IP banned | ✅ Works |
|
|
260
|
+
| LinkedIn | ❌ Blocked after 3 req | ✅ Undetected |
|
|
261
|
+
| Fingerprint | Bot-detectable | iPhone 15 Pro |
|
|
262
|
+
| Mouse movement | Instant teleport | Bezier curves |
|
|
263
|
+
| Typing | Instant | 60–220ms/char |
|
|
264
|
+
| Country targeting | ❌ No | ✅ 10+ countries |
|
|
265
|
+
| Agent payment API | ❌ No | ✅ Yes |
|
|
269
266
|
|
|
270
267
|
---
|
|
271
268
|
|
|
272
|
-
##
|
|
269
|
+
## Bring your own proxy (optional)
|
|
273
270
|
|
|
274
|
-
|
|
275
|
-
# Install dependencies
|
|
276
|
-
npm install playwright
|
|
277
|
-
npx playwright install chromium --with-deps
|
|
271
|
+
If you have a Bright Data, Decodo, or IPRoyal account, plug in your own credentials:
|
|
278
272
|
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
#
|
|
282
|
-
|
|
273
|
+
```env
|
|
274
|
+
PROXY_HOST=brd.superproxy.io # your proxy host
|
|
275
|
+
PROXY_PORT=22225 # your proxy port
|
|
276
|
+
PROXY_USER=your-proxy-username
|
|
277
|
+
PROXY_PASS=your-proxy-password
|
|
283
278
|
```
|
|
284
279
|
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
| Feature | Regular Playwright | Human Browser |
|
|
290
|
-
|---------|-------------------|---------------|
|
|
291
|
-
| IP type | Data center → blocked | Residential → clean |
|
|
292
|
-
| Bot detection | Fails | Passes all |
|
|
293
|
-
| Mouse movement | Instant teleport | Bezier curves |
|
|
294
|
-
| Typing speed | Instant | 60–220ms/char |
|
|
295
|
-
| Fingerprint | Detectable bot | iPhone 15 Pro |
|
|
296
|
-
| Countries | None | 10+ residential |
|
|
297
|
-
| Cloudflare | Blocked | Bypassed |
|
|
298
|
-
| DataDome | Blocked | Bypassed |
|
|
299
|
-
| Agent payment | Manual | API-native |
|
|
280
|
+
The skill works with any residential proxy provider. Recommended:
|
|
281
|
+
- **Decodo** (ex-Smartproxy) — 195M+ IPs, 195 countries, best bypass rate → https://decodo.com
|
|
282
|
+
- **IPRoyal** — budget, good for high-volume → https://iproyal.com
|
|
283
|
+
- **Bright Data** — enterprise, most IPs → https://brightdata.com
|
|
300
284
|
|
|
301
285
|
---
|
|
302
286
|
|
|
303
|
-
→ **
|
|
304
|
-
→ **
|
|
305
|
-
→ **
|
|
287
|
+
→ **Buy credentials + pricing:** https://humanbrowser.dev
|
|
288
|
+
→ **Pay-per-Request API (agents):** https://humanbrowser.dev/ppr
|
|
289
|
+
→ **Support:** https://t.me/virixlabs
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "human-browser",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.2.1",
|
|
4
4
|
"description": "Stealth browser with residential proxies from 10+ countries for AI agents. Bypasses Cloudflare, DataDome, PerimeterX. iPhone 15 Pro fingerprint.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"browser-automation",
|
package/scripts/browser-human.js
CHANGED
|
@@ -228,7 +228,60 @@ async function launchHuman(opts = {}) {
|
|
|
228
228
|
return { browser, ctx, page, humanClick, humanMouseMove, humanType, humanScroll, humanRead, sleep, rand };
|
|
229
229
|
}
|
|
230
230
|
|
|
231
|
-
|
|
231
|
+
// ─── TRIAL ────────────────────────────────────────────────────────────────────
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* Get free trial credentials from humanbrowser.dev
|
|
235
|
+
* Fetches shared trial proxy (~100MB, Romania). Sets env vars automatically.
|
|
236
|
+
*
|
|
237
|
+
* Usage:
|
|
238
|
+
* const { launchHuman, getTrial } = require('./browser-human');
|
|
239
|
+
* await getTrial(); // sets PROXY_USER/PASS in process.env
|
|
240
|
+
* const { page } = await launchHuman(); // now uses trial credentials
|
|
241
|
+
*
|
|
242
|
+
* When trial runs out → throws { code: 'TRIAL_EXHAUSTED', cta_url: '...' }
|
|
243
|
+
*/
|
|
244
|
+
async function getTrial() {
|
|
245
|
+
let https;
|
|
246
|
+
try { https = require('https'); } catch { https = require('http'); }
|
|
247
|
+
|
|
248
|
+
return new Promise((resolve, reject) => {
|
|
249
|
+
const req = https.get('https://humanbrowser.dev/api/trial', (res) => {
|
|
250
|
+
let body = '';
|
|
251
|
+
res.on('data', chunk => body += chunk);
|
|
252
|
+
res.on('end', () => {
|
|
253
|
+
try {
|
|
254
|
+
const data = JSON.parse(body);
|
|
255
|
+
if (data.error || res.statusCode !== 200) {
|
|
256
|
+
const err = new Error(data.error || 'Trial unavailable');
|
|
257
|
+
err.code = 'TRIAL_UNAVAILABLE';
|
|
258
|
+
err.cta_url = 'https://humanbrowser.dev';
|
|
259
|
+
return reject(err);
|
|
260
|
+
}
|
|
261
|
+
// Auto-set env vars so launchHuman() picks them up
|
|
262
|
+
process.env.PROXY_HOST = data.proxy_host;
|
|
263
|
+
process.env.PROXY_PORT = data.proxy_port;
|
|
264
|
+
process.env.PROXY_USER = data.proxy_user;
|
|
265
|
+
process.env.PROXY_PASS = data.proxy_pass;
|
|
266
|
+
|
|
267
|
+
console.log('🎉 Human Browser trial activated! (~100MB Romania residential IP)');
|
|
268
|
+
console.log(' Upgrade at: https://humanbrowser.dev\n');
|
|
269
|
+
resolve(data);
|
|
270
|
+
} catch (e) {
|
|
271
|
+
reject(e);
|
|
272
|
+
}
|
|
273
|
+
});
|
|
274
|
+
});
|
|
275
|
+
req.on('error', (e) => {
|
|
276
|
+
const err = new Error('Could not reach humanbrowser.dev: ' + e.message);
|
|
277
|
+
err.code = 'TRIAL_NETWORK_ERROR';
|
|
278
|
+
reject(err);
|
|
279
|
+
});
|
|
280
|
+
req.setTimeout(10000, () => { req.destroy(); reject(new Error('Trial request timed out')); });
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
module.exports = { launchHuman, getTrial, humanClick, humanMouseMove, humanType, humanScroll, humanRead, sleep, rand, COUNTRY_META };
|
|
232
285
|
|
|
233
286
|
// ─── QUICK TEST ───────────────────────────────────────────────────────────────
|
|
234
287
|
if (require.main === module) {
|