Shopee Captcha Solver API
This project is the SadCaptcha Shopee Captcha Solver API client.
The purpose is to make integrating SadCaptcha into your Selenium, Playwright, or Async Playwright app as simple as one line of code.
Instructions for integrating with Selenium, Playwright, and Async Playwright are described below in their respective sections.
The end goal of this tool is to solve every single Shopee captcha.
Currently we are able to solve the crawling image and the puzzle slide:
The Crawling Image challenge is the one where there is a puzzle piece that travels in an unpredictable trajectory, and there are two possible locations where the solution may be.
This often shows up at login.
The puzzle slide is just a simple challenge that asks you to move the piece to the correct location.
Requirements
- Python >= 3.10
- If using Nodriver - Google chrome installed on system. This is the recommended method.
- If using Selenium - Selenium properly installed and in
PATH
- If using Playwright - Playwright must be properly installed with
playwright install
- Stealth plugin - You should use the appropriate
stealth
plugin for whichever browser automation framework you are using.
Installation
This project can be installed with pip
. Just run the following command:
pip install shopee-captcha-solver
Nodriver Client (Recommended)
Nodriver is the latest advancement in undetected automation technology, and is the recommended method for using SadCaptcha.
Import the function make_nodriver_solver
This function will create an noddriver instance patched with the Shopee Captcha Solver chrome extension.
The extension will automatically detect and solve the captcha in the background, and there is nothing further you need to do.
from shopee_captcha_solver.launcher import make_nodriver_solver
async def main():
launch_args = ["--headless=chrome"]
api_key = "YOUR_API_KEY_HERE"
driver = await make_nodriver_solver(api_key, browser_args=launch_args)
All keyword arguments passed to make_nodriver_solver()
are passed directly to nodriver.start()
.
Selenium Client
Import the function make_undetected_chromedriver_solver
.
This function will create an undetected chromedriver instance patched with the Shopee Captcha Solver chrome extension.
The extension will automatically detect and solve the captcha in the background, and there is nothing further you need to do.
from shopee_captcha_solver import make_undetected_chromedriver_solver
from selenium_stealth import stealth
from selenium.webdriver import ChromeOptions
import undetected_chromedriver as uc
chrome_options = ChromeOptions()
api_key = "YOUR_API_KEY_HERE"
driver = make_undetected_chromedriver_solver(api_key, options=options)
stealth(driver)
You may also pass ChromeOptions
to make_undetected_chromedriver_solver()
, as well as keyword arguments for uc.Chrome()
.
Playwright Client
Import the function make_playwright_solver_context
.
This function will create a playwright BrowserContext instance patched with the Shopee Captcha Solver chrome extension.
The extension will automatically detect and solve the captcha in the background, and there is nothing further you need to do.
from shopee_captcha_solver import make_playwright_solver_context
from playwright.sync_api import sync_playwright
launch_args = ["--headless=chrome"]
api_key = "YOUR_API_KEY_HERE"
with sync_playwright() as p:
context = make_playwright_solver_context(p, api_key, args=launch_args)
You may also pass keyword args to this function, which will be passed directly to playwright's call to playwright.chromium.launch_persistent_context()
.
By default, the user data directory is a tempory directory that is deleted at the end of runtime.
Async Playwright Client
Import the function make_async_playwright_solver_context
.
This function will create an async playwright BrowserContext instance patched with the Shopee Captcha Solver chrome extension.
The extension will automatically detect and solve the captcha in the background, and there is nothing further you need to do.
import asyncio
from playwright.async_api import async_playwright
from shopee_captcha_solver import make_async_playwright_solver_context
launch_args = ["--headless=chrome"]
async def main():
api_key = "YOUR_API_KEY_HERE"
async with async_playwright() as p:
context = await make_async_playwright_solver_context(p, api_key, args=launch_args)
asyncio.run(main())
You may also pass keyword args to this function, which will be passed directly to playwright's call to playwright.chromium.launch_persistent_context()
.
By default, the user data directory is a tempory directory that is deleted at the end of runtime.
Contact