Was this helpful?
How to bypass reCAPTCHA v3 on Waze
Technical engineer
Introduction
Waze is a popular navigation and traffic tracking application. Its interactive map (Live Map) uses reCAPTCHA v3 to protect API endpoints and prevent automated requests. Unlike previous versions, reCAPTCHA v3 works invisibly to the user and evaluates behavior based on a score from 0.0 to 1.0.
In this guide, we will break down how to get the necessary parameters, solve the captcha via the 2Captcha API, and correctly integrate the token into your script.
Task parameters
To bypass reCAPTCHA v3 on Waze, the RecaptchaV3TaskProxyless task type is used.
json
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "RecaptchaV3TaskProxyless",
"websiteURL": "https://www.waze.com/ru/live-map",
"websiteKey": "6Lf4WdUqAAAAAEUYUvzyLYIkO3PoFAqi8ZHGiDLW",
"pageAction": "api",
"minScore": 0.3,
"apiDomain": "www.recaptcha.net",
"isEnterprise": true
}
}
How to find parameters
websiteURL
This is the full address of the page where the verification is initiated. For Waze, this can be the main map page (https://www.waze.com/live-map) or its localized version (https://www.waze.com/ru/live-map).
websiteKey (SiteKey)
- Open the map page and press F12 (DevTools).
- Go to the Elements tab and press Ctrl+F to search.
- Type 6Lf4 or recaptcha and copy the value of the data-sitekey attribute.
- Alternatively, on the Network tab, you can find a request to google.com/recaptcha or recaptcha.net and look at the k parameter.
pageAction
This parameter specifies which exact action on the site triggers the captcha.
- On the Sources tab or in the DevTools console, find the grecaptcha.execute call.
- The second argument of this call usually contains an object with the action field. For Waze, when loading the map, this is often the value api or live_map.
apiDomain
Check which domain the captcha script is loaded from. If the script URL specifies recaptcha.net (for example, https://www.recaptcha.net/recaptcha/enterprise.js), pass www.recaptcha.net. If the standard Google domain is used, specify www.google.com.
isEnterprise
Check the URL of the loaded script. If it contains the word enterprise (for example, recaptcha/enterprise.js), it means the corporate version is used, and this parameter must be true.
reCAPTCHA v3 specifics and Waze features
Solving reCAPTCHA v3 is a complex task, as it imposes strict requirements on the score value. Success depends on a combination of factors: correct parameters, browser digital fingerprints, and session behavior.
However, as practice has shown, our tokens with a high score successfully pass the captcha on this site. The main thing is to use the correct parameters (especially pageAction and apiDomain).
Why minScore=0.3 and not 0.9
reCAPTCHA v3 returns a score from 0.0 to 1.0, where:
- 0.9-1.0 — very likely a human
- 0.5-0.8 — possibly a human
- 0.0-0.4 — very likely a bot
Many developers mistakenly set minScore=0.9, expecting a "perfect" token. But this leads to problems:
- Long wait times — it is harder for the service to get a token with such a high score.
- Blocks — if the site expects a score of 0.7, and you pass a token with a score of 0.95, it might look suspicious.
- Extra costs — the service might not find a solution with such a high score and return an error.
For Waze, the optimal minScore is 0.3 because:
- The site accepts tokens with a relatively low score.
- A solution is found faster.
- There is less chance of being blocked due to "too perfect" behavior.
If the site rejects tokens with a score of 0.3, try increasing it to 0.5 or 0.7.
How exactly Waze expects the token
Waze uses reCAPTCHA v3 Enterprise to protect its API endpoints. The token is usually passed in the body of a POST request as a recaptcha_token or g-recaptcha-response parameter.
Example of a request to the Waze API:
python
import requests
token = "YOUR_RECAPTCHA_TOKEN"
headers = {
'Content-Type': 'application/json',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
}
data = {
'recaptcha_token': token,
# other request parameters
}
response = requests.post(
'https://www.waze.com/row-rtserver/web/TGeoSearch',
headers=headers,
json=data
)
print(response.json())
If you are using Playwright/Selenium, the token can be passed by intercepting requests (as shown in the example below) or by executing JavaScript:
python
await page.evaluate(f"""
window.recaptchaToken = '{token}';
""")
Code examples
Python + requests (Getting the token)
If you just need to get the token to subsequently send it to the Waze backend via API:
python
import sys
import os
sys.path.append(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))
from twocaptcha import TwoCaptcha
api_key = os.getenv('APIKEY_2CAPTCHA', 'YOUR_API_KEY')
solver = TwoCaptcha(api_key)
try:
result = solver.recaptcha(
sitekey='6Lf4WdUqAAAAAEUYUvzyLYIkO3PoFAqi8ZHGiDLW',
url='https://www.waze.com/ru/live-map',
version='v3',
action='api',
min_score=0.3,
domain='www.recaptcha.net',
enterprise=1
)
print(f"Token successfully received: {result['code']}")
except Exception as e:
print(f"An error occurred: {e}")
Python + Playwright (Browser automation)
When automating a browser, the reCAPTCHA v3 token is usually passed directly in the body of a POST request to the site's API or written to a header.
python
import asyncio
from playwright.async_api import async_playwright
from twocaptcha import TwoCaptcha
API_KEY = 'YOUR_API_KEY'
SITE_KEY = '6Lf4WdUqAAAAAEUYUvzyLYIkO3PoFAqi8ZHGiDLW'
PAGE_URL = 'https://www.waze.com/ru/live-map'
async def solve_captcha():
solver = TwoCaptcha(API_KEY)
try:
result = solver.recaptcha(
sitekey=SITE_KEY,
url=PAGE_URL,
version='v3',
action='api',
min_score=0.3,
domain='www.recaptcha.net',
is_enterprise=True
)
token = result['code']
print(f"Captcha solved! Token: {token}")
async with async_playwright() as p:
browser = await p.chromium.launch()
context = await browser.new_context()
page = await context.new_page()
await page.goto(PAGE_URL)
async def handle_route(route):
request = route.request
headers = request.headers
headers['g-recaptcha-response'] = token
await route.continue_(headers=headers)
await page.route('**/api/**', handle_route)
await page.reload()
await asyncio.sleep(5)
await browser.close()
except Exception as e:
print(f"Error: {e}")
asyncio.run(solve_captcha())
Solution accuracy reports
For reCAPTCHA v3, sending reports is critically important. If the site rejected the token, be sure to report it via the reportIncorrect method. This helps the service analyze the reasons for the low score and refunds your funds. If the token successfully passed the verification, send reportCorrect — this consolidates positive statistics and helps maintain a high level of solution quality.
You can submit a report via the API:
python
import requests
API_KEY = "YOUR_API_KEY"
TASK_ID = "123456789"
# Report for an incorrect solution
requests.post(
"https://api.2captcha.com/reportIncorrect",
json={"clientKey": API_KEY, "taskId": TASK_ID}
)
# Report for a correct solution
requests.post(
"https://api.2captcha.com/reportCorrect",
json={"clientKey": API_KEY, "taskId": TASK_ID}
)
Detailed guide on submitting reports with examples for different languages: https://2captcha.com/h/how-to-submit-reports
Common errors and solutions
| Error / Problem | Cause | Solution |
|---|---|---|
| ERROR_BAD_PARAMETERS | Incorrect pageAction, apiDomain, or isEnterprise specified | Check the parameters in DevTools. For Waze, the action is often api, and the domain is www.recaptcha.net |
| Token received, but the site rejects the request | The site expects a different token passing mechanism or the score is too low | Make sure you pass the token to the correct header or request body. Check the correctness of pageAction |
| ERROR_ZERO_BALANCE | Insufficient funds on balance | Top up your account in your 2Captcha dashboard |
| Iframe or requests not found | Waze loads the map dynamically | Wait for the page to fully load and API network requests to appear before searching for parameters |
Useful links
- Sandbox for API testing: https://2captcha.com/setting#sandbox
- reCAPTCHA v3 documentation: https://2captcha.com/api-docs/recaptcha-v3
- Detailed guide on submitting reports: https://2captcha.com/h/how-to-submit-reports
- Library for Python: https://github.com/2captcha/2captcha-python