No description
Find a file
Sawyer 8efbbbcf08
Some checks failed
Build and Push Docker Image / build (push) Has been cancelled
docs(README): add a link to the other POW challenges
2025-08-17 14:11:31 -05:00
.github/workflows fix(ci): fix failing build 2025-08-05 19:31:54 -05:00
.dockerignore feat(container): add container builds 2025-08-05 19:27:37 -05:00
.gitignore initialize 2025-07-23 01:06:26 -05:00
.python-version initialize 2025-07-23 01:06:26 -05:00
BUILD.md feat(container): add container builds 2025-08-05 19:27:37 -05:00
config.py feat(config): allow configuration with environment variables 2025-08-05 18:47:06 -05:00
docker-compose.yml feat(container): add docker compose and docker docs 2025-08-05 19:42:52 -05:00
Dockerfile feat(container): add container builds 2025-08-05 19:27:37 -05:00
LICENSE chore(license): add AGPLv3 2025-07-23 13:17:19 -05:00
proxy.py feat: replace print statements with logging 2025-07-25 02:03:38 -05:00
pyproject.toml chore(license): add license to pyproject.toml 2025-07-23 13:21:59 -05:00
README.md docs(README): add a link to the other POW challenges 2025-08-17 14:11:31 -05:00
requirements.txt chore(deps): add requirements.txt 2025-07-23 13:14:39 -05:00
uv.lock initialize 2025-07-23 01:06:26 -05:00

chromedriver-http-proxy

Simple HTTP proxy that renders pages with undetected-chromedriver and returns the rendered HTML.

Features

Installation

Container

docker run --rm -p "32323:32323" ghcr.io/s4wyer/chromedriver-http-proxy # or s44wyer/chromedriver-http-proxy

There's also a Docker compose example with better config.

System

uv:

sudo apt install chromium # or sudo pacman -S chromium
uv venv
source .venv/bin/activate
uv pip install -r pyproject.toml
uvx playwright install

pip:

sudo apt install chromium # or sudo pacman -S chromium
pip install -r requirements.txt
playwright install

Usage

Run proxy.py, and make a request to localhost:32323/?url=https://ifconfig.me.

You can also pass several arguments.

# default port: 32323
# default host: 0.0.0.0
# default wait: 10 (seconds)
# default user agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36
# default headless mode: True
python proxy.py --host 127.0.0.1 --port 1337 --wait 5 --headless False --user-agent "Mozilla/5.0 (X11; U; SunOS sun4u; en-US; rv:1.0.1) Gecko/20020921 Netscape/7.0"

Notes

I built this mainly to solve Anubis challenges for my Miniflux RSS instance, so it's a little rough around the edges.

This proxy has no authentication, and I don't plan to add any (PRs welcome though!). Don't expose it to the internet.

TODO

  • ARM Docker images
  • Send JS/CSS to the client
  • Custom Chromium binary locations
  • More CLI arguments to control ChromeDriver behavior
  • Error handling (404, 403, 429)
  • Screenshot endpoint
  • Allow custom headers
  • POST requests
  • Docker image

Similiar Projects

  • Kad - A simple HTTP proxy server that forwards all requests through curl-impersonate