[Bug]: Browser hangs indefinitely on WSL when system proxy is required
I maintainer di solito rispondono entro 1 giorno
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 45/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Tranquilla
- Stack tecnologico
- playwright, python
- Ambito
- backend, networking
Direzione di ricerca
Start with the AsyncWebCrawler and BrowserConfig browser-launch path, then compare it with the working Playwright launch using proxy configuration. Reproduce the WSL2 case from the issue and verify that a crawl of https://example.com completes when a proxy is required, including the proxy and extra_args configurations.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
crawl4ai version
0.8.6
Expected Behavior
When proxy or proxy_config is set in BrowserConfig, crawl4ai should
successfully launch Chromium with the proxy and complete the crawl.
Current Behavior
On WSL2 where a proxy is required for internet access, AsyncWebCrawler hangs
indefinitely after printing "[INIT].... → Crawl4AI 0.8.6" and never completes.
Setting proxy via BrowserConfig(proxy=...), BrowserConfig(proxy_config=...),
or extra_args=["--proxy-server=..."] all result in the same hang.
Is this reproducible?
Yes
Inputs Causing the Bug
Any URL requiring internet access (e.g. https://example.com) when running on
WSL2 where Chrome cannot connect to the internet directly.
Steps to Reproduce
1. Install crawl4ai on WSL2:
pip install crawl4ai
crawl4ai-setup
2. Verify that Python requests work fine with proxy (direct Chrome cannot reach internet):
HOST_IP=$(ip route | awk '/default/ {print $3}')
http_proxy=http://$HOST_IP:7892 python -c "import requests; print(requests.get('https://www.google.com', timeout=15).status_code)"
# Output: 200
3. Verify that plain Playwright works fine with proxy:
python -c "
from playwright.sync_api import sync_playwright
p = sync_playwright().start()
b = p.chromium.launch()
print('OK')
b.close()
p.stop()
"
# Output: OK
4. Run a basic crawl4ai crawl (no proxy):
python -c "
import asyncio
from crawl4ai import AsyncWebCrawler
async def test():
async with AsyncWebCrawler() as crawler:
result = await crawler.arun('https://example.com')
print(result.success)
asyncio.run(test())
"
# Hangs forever at: [INIT].... → Crawl4AI 0.8.6
5. Try with proxy set in BrowserConfig:
python -c "
import asyncio
from crawl4ai import AsyncWebCrawler, BrowserConfig
async def test():
config = BrowserConfig(proxy='http://172.29.240.1:7892')
async with AsyncWebCrawler(config=config) as crawler:
result = await crawler.arun('https://example.com')
print(result.success)
asyncio.run(test())
"
# Also hangs forever at: [INIT].... → Crawl4AI 0.8.6
6. Confirmed root cause: crawl4ai uses subprocess.Popen to launch Chrome
without passing proxy env vars, so Chrome cannot reach the internet on WSL2.
Plain Playwright with proxy={"server": ...} works correctly.
Code snippets
# Hangs forever
import asyncio
from crawl4ai import AsyncWebCrawler, BrowserConfig, CrawlerRunConfig
async def main():
config = BrowserConfig(proxy="http://172.29.240.1:7892")
async with AsyncWebCrawler(config=config) as crawler:
result = await crawler.arun("https://example.com")
asyncio.run(main())
# Workaround: launch browser manually via Playwright and connect via CDP
import subprocess
from playwright.async_api import async_playwright
from crawl4ai import AsyncWebCrawler, BrowserConfig, CrawlerRunConfig
HOST_IP = subprocess.check_output(
"ip route | awk '/default/ {print $3}'", shell=True).decode().strip()
async def main():
async with async_playwright() as p:
browser = await p.chromium.launch(
headless=True,
args=["--no-sandbox", "--disable-dev-shm-usage",
"--remote-debugging-port=9222"],
proxy={"server": f"http://{HOST_IP}:7892"}
)
config = BrowserConfig(cdp_url="http://localhost:9222")
async with AsyncWebCrawler(config=config) as crawler:
result = await crawler.arun("https://example.com",
config=CrawlerRunConfig(page_timeout=15000))
print(result.success)
await browser.close()
asyncio.run(main())
OS
OS: Windows 11 + WSL2 (Ubuntu 24.04)
Python version
3.12
Browser
Chromium (crawl4ai managed)
Browser version
Google Chrome for Testing 145.0.7632.6
Error logs & Screenshots (if applicable)
No response
- Lingua principale
- Python
- Stelle
- 85.4k
- Fork
- 8.9k
- Merge medio
- 5g 7h
- PR unite (30g)
- 23
Preparare l'ambiente
- Include un Dockerfile o un file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di unclecode/crawl4ai
-
[Bug]: Since 0.9.1, Linux launches chrome-headless-shell instead of ChromiumForse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
-
[Bug]: BestFirstCrawlingStrategy fetches a full batch past max_pagesForse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
unclecode/crawl4ai#2381 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
[Bug]: CrawlerRunConfig.clone() drops fallback_fetch_function, so deep crawls never use itForse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
[Bug]: Docker memory guard reads host RAM when no container limit is set — cgroup v2 "max" defeats get_container_memory_percentForse già presa @Battleplus l’ha presa 54 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
unclecode/crawl4ai#2123 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
[Bug]: After a streamed deep crawl is stopped early, the next deep crawl returns only the start pageForse già presa @PiUnknown l’ha presa 2 giorni fa. Aperta
Difficoltà 4/5 1-2 giorni Idoneità per principianti 12/100
unclecode/crawl4ai#2380 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di unclecode/crawl4ai
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
sierra-research/tau2-bench#635 ·
I maintainer di solito rispondono entro 1 giorno
-
The add-ssm-model skill requires a Cython simulator; the contributing guide allows Python onesForse già presa @fmuia l’ha presa oggi. Apertadocumentation skill
Difficoltà 2/5 1-3 ore Idoneità per principianti 83/100
lnccbrown/ssm-simulators#406 ·
I maintainer di solito rispondono entro 4 giorni
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 95/100
btclib-org/btclib-ecc#309 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
jbacalso24/mimry#459 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
[Bug] POST /revoke with a FastMCP access token is a silent no-op (ownership gate never matches)Apertaauth bug high-priority
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno