dgtlmoon/changedetection.io · error · BrowserStepsInUnsupportedFetcher
BrowserStepsInUnsupportedFetcher
Error message
BrowserStepsInUnsupportedFetcher
What it means
The plain requests-based fetcher cannot execute browser steps, so if a watch has browser_steps configured it immediately raises BrowserStepsInUnsupportedFetcher.
Source
Thrown at changedetectionio/content_fetchers/requests.py:43
url,
timeout,
request_headers,
request_body,
request_method,
ignore_status_codes=False,
current_include_filters=None,
is_binary=False,
empty_pages_are_a_change=False,
watch_uuid=None,
):
"""Synchronous version of run - the original requests implementation"""
import chardet
import requests
from requests.exceptions import ProxyError, ConnectionError, RequestException
if self.browser_steps:
raise BrowserStepsInUnsupportedFetcher(url=url)
proxies = {}
# Allows override the proxy on a per-request basis
# https://requests.readthedocs.io/en/latest/user/advanced/#socks
# Should also work with `socks5://user:pass@host:port` type syntax.
if self.proxy_override:
proxies = {'http': self.proxy_override, 'https': self.proxy_override, 'ftp': self.proxy_override}
else:
if self.system_http_proxy:
proxies['http'] = self.system_http_proxy
if self.system_https_proxy:
proxies['https'] = self.system_https_proxy
session = requests.Session()
# Configure retry adapter for low-level network errors onlyView on GitHub (pinned to 5d9c7c6da7)
Solutions
- Switch the watch's fetcher to Playwright (or puppeteer)
- Or delete the browser steps if they are not needed
Defensive patterns
Strategy: validation
Validate before calling
def fetcher_supports_steps(fetcher_name: str, has_steps: bool) -> bool:
return not has_steps or fetcher_name in ('playwright', 'puppeteer') Try / catch
try:
fetcher.run()
except BrowserStepsInUnsupportedFetcher:
watch['fetcher'] = 'playwright'
retry_check() Prevention
- When adding browser steps, ensure the watch fetcher is playwright
- Validate watch configs on save: steps + requests fetcher = misconfiguration
When it happens
Trigger: Watch has browser steps defined but its fetcher is 'requests' (plain HTTP) — either explicitly chosen or falling back from a missing browser service.
Common situations: User records steps then switches fetcher to requests for speed; default fetcher used on a watch created via API with steps payload.
Related errors
AI-assisted analysis of dgtlmoon/changedetection.io@5d9c7c6da7 (2026-08-27).
Data as JSON: /api/errors/a517bcc814535e11.
Report an issue: GitHub.