├── requirements.txt ├── .gitattributes ├── docs ├── demo.gif └── capsolver.png ├── test.py ├── CapsolverRecaptchaV3Bypasser.py ├── README.md └── .gitignore /requirements.txt: -------------------------------------------------------------------------------- 1 | capsolver 2 | selenium -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /docs/demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sarperavci/Capsolver-GoogleRecaptchaV3Bypass/HEAD/docs/demo.gif -------------------------------------------------------------------------------- /docs/capsolver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sarperavci/Capsolver-GoogleRecaptchaV3Bypass/HEAD/docs/capsolver.png -------------------------------------------------------------------------------- /test.py: -------------------------------------------------------------------------------- 1 | from CapsolverRecaptchaV3Bypasser import CapsolverRecaptchaV3Bypasser 2 | from selenium import webdriver 3 | from selenium.webdriver.common.by import By 4 | import time 5 | 6 | CAPSOLVER_API_KEY = "YOUR_CAPSOLVER_API_KEY" 7 | PAGE_URL = "https://2captcha.com/demo/recaptcha-v3" 8 | PAGE_KEY = "6LfB5_IbAAAAAMCtsjEHEHKqcB9iQocwwxTiihJu" 9 | 10 | page = webdriver.Chrome() 11 | page.get( PAGE_URL ) 12 | recaptchaBypasser = CapsolverRecaptchaV3Bypasser(page, PAGE_URL, PAGE_KEY, CAPSOLVER_API_KEY) 13 | 14 | print("Solving reCaptcha v3...") 15 | t0 = time.time() 16 | recaptchaBypasser.solve_recaptcha() 17 | print( f"Time elapsed: {time.time() - t0:.2f} seconds" ) 18 | 19 | 20 | buttons = page.find_elements(By.TAG_NAME,"button") 21 | for button in buttons: 22 | if button.text == "Check": 23 | button.click() 24 | break 25 | 26 | input("Press Enter to close the browser") 27 | 28 | page.quit() 29 | 30 | -------------------------------------------------------------------------------- /CapsolverRecaptchaV3Bypasser.py: -------------------------------------------------------------------------------- 1 | from selenium import webdriver 2 | import time 3 | import capsolver 4 | 5 | class CapsolverRecaptchaV3Bypasser: 6 | def __init__(self, webdriver:webdriver.Chrome , page_url, page_key, api_key): 7 | capsolver.api_key = api_key 8 | self.page_url = page_url 9 | self.page_key = page_key 10 | self.solution = None 11 | self.webdriver = webdriver 12 | 13 | def solve_recaptcha(self): 14 | self.solution = capsolver.solve({ 15 | "type": "ReCaptchaV3TaskProxyless", 16 | "websiteURL": self.page_url, 17 | "websiteKey": self.page_key, 18 | }) 19 | 20 | self.webdriver.execute_cdp_cmd('Network.setUserAgentOverride', { 21 | "userAgent": self.solution["userAgent"] 22 | }) 23 | time.sleep(.1) 24 | 25 | self.webdriver.execute_script(f"document.getElementsByClassName('g-recaptcha-response')[0].value = '{self.solution['gRecaptchaResponse']}';") 26 | time.sleep(.1) -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Capsolver GoogleRecaptchaV3 Bypass 2 | 3 | [![Capsolver](https://github.com/user-attachments/assets/05da2c43-fe5e-4627-b107-bfce969dacf1)](https://www.capsolver.com/?utm_source=github&utm_medium=ads&utm_campaign=scraping&utm_term=Capsolver-GoogleRecaptchaV3Bypass) 4 | 5 | **Solve Google Recaptcha V3 in just one line of code!** 6 | 7 | A Selenium implementation to bypass Google Recaptcha V3 using Capsolver API. 8 | 9 | ## Demo 10 | 11 | ![Demo](docs/demo.gif) 12 | 13 | The captcha is solved in less than 2 seconds. 14 | 15 | ## Installation 16 | 17 | To install the required packages, run the following command: 18 | 19 | ```bash 20 | pip install -r requirements.txt 21 | ``` 22 | 23 | ## Usage 24 | 25 | To use this script, you need to have a Capsolver account. You can create an account [here](https://dashboard.capsolver.com/passport/register?inviteCode=nqZvQXp_lveg) and get your API key. Once you have your API key, replace `YOUR_API_KEY` in the script with your actual API key. 26 | 27 | Example usage: 28 | 29 | ```python 30 | from CapsolverRecaptchaV2Bypasser import CapsolverRecaptchaV2Bypasser 31 | from selenium import webdriver 32 | 33 | CAPSOLVER_API_KEY = "YOUR_CAPSOLVER_API_KEY" 34 | PAGE_URL = "https://2captcha.com/demo/recaptcha-v3" 35 | PAGE_KEY = "6LfB5_IbAAAAAMCtsjEHEHKqcB9iQocwwxTiihJu" 36 | 37 | page = webdriver.Chrome() 38 | page.get( PAGE_URL ) 39 | recaptchaBypasser = CapsolverRecaptchaV3Bypasser(page, PAGE_URL, PAGE_KEY, CAPSOLVER_API_KEY) 40 | 41 | recaptchaBypasser.solve_recaptcha() 42 | ``` 43 | ## Test 44 | 45 | To test the script, edit the `test.py` file and replace `YOUR API KEY` with your actual API key. Then run the following command: 46 | 47 | ```bash 48 | python test.py 49 | ``` 50 | 51 | ## Capsolver 52 | 53 | Capsolver is a platform that provides APIs to solve CAPTCHAs. You can use Capsolver to bypass CAPTCHAs in your web scraping projects. The platform supports solving Google Recaptcha V2, Recaptcha V3, GeeTest, and more. You can create an account [here](https://dashboard.capsolver.com/passport/register?inviteCode=nqZvQXp_lveg) and get your API key. 54 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | share/python-wheels/ 24 | *.egg-info/ 25 | .installed.cfg 26 | *.egg 27 | MANIFEST 28 | 29 | # PyInstaller 30 | # Usually these files are written by a python script from a template 31 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 32 | *.manifest 33 | *.spec 34 | 35 | # Installer logs 36 | pip-log.txt 37 | pip-delete-this-directory.txt 38 | 39 | # Unit test / coverage reports 40 | htmlcov/ 41 | .tox/ 42 | .nox/ 43 | .coverage 44 | .coverage.* 45 | .cache 46 | nosetests.xml 47 | coverage.xml 48 | *.cover 49 | *.py,cover 50 | .hypothesis/ 51 | .pytest_cache/ 52 | cover/ 53 | 54 | # Translations 55 | *.mo 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | db.sqlite3 62 | db.sqlite3-journal 63 | 64 | # Flask stuff: 65 | instance/ 66 | .webassets-cache 67 | 68 | # Scrapy stuff: 69 | .scrapy 70 | 71 | # Sphinx documentation 72 | docs/_build/ 73 | 74 | # PyBuilder 75 | .pybuilder/ 76 | target/ 77 | 78 | # Jupyter Notebook 79 | .ipynb_checkpoints 80 | 81 | # IPython 82 | profile_default/ 83 | ipython_config.py 84 | 85 | # pyenv 86 | # For a library or package, you might want to ignore these files since the code is 87 | # intended to run in multiple environments; otherwise, check them in: 88 | # .python-version 89 | 90 | # pipenv 91 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 92 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 93 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 94 | # install all needed dependencies. 95 | #Pipfile.lock 96 | 97 | # poetry 98 | # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. 99 | # This is especially recommended for binary packages to ensure reproducibility, and is more 100 | # commonly ignored for libraries. 101 | # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control 102 | #poetry.lock 103 | 104 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 105 | __pypackages__/ 106 | 107 | # Celery stuff 108 | celerybeat-schedule 109 | celerybeat.pid 110 | 111 | # SageMath parsed files 112 | *.sage.py 113 | 114 | # Environments 115 | .env 116 | .venv 117 | env/ 118 | venv/ 119 | ENV/ 120 | env.bak/ 121 | venv.bak/ 122 | 123 | # Spyder project settings 124 | .spyderproject 125 | .spyproject 126 | 127 | # Rope project settings 128 | .ropeproject 129 | 130 | # mkdocs documentation 131 | /site 132 | 133 | # mypy 134 | .mypy_cache/ 135 | .dmypy.json 136 | dmypy.json 137 | 138 | # Pyre type checker 139 | .pyre/ 140 | 141 | # pytype static type analyzer 142 | .pytype/ 143 | 144 | # Cython debug symbols 145 | cython_debug/ 146 | 147 | # PyCharm 148 | # JetBrains specific template is maintainted in a separate JetBrains.gitignore that can 149 | # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore 150 | # and can be added to the global gitignore or merged into this file. For a more nuclear 151 | # option (not recommended) you can uncomment the following to ignore the entire idea folder. 152 | #.idea/ 153 | --------------------------------------------------------------------------------