finance-dl drives a real Chrome browser for all of its Selenium-based scrapers, and that requires a working ChromeDriver binary that precisely matches the installed version of Chrome. This page explains how ChromeDriver is supplied, why version mismatches happen, and how to resolve them — along with the logging and headless-mode options available during both normal and debug runs.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/jbms/finance-dl/llms.txt
Use this file to discover all available pages before exploring further.
How ChromeDriver Is Supplied
finance-dl does not use a system-installedchromedriver binary. Instead, it uses ChromeDriver from the chromedriver_binary Python package, which is installed automatically as a dependency of finance-dl. The chromedriver_binary package ships a pinned ChromeDriver binary appropriate for a specific major Chrome version.
The ChromeDriver binary is exposed to finance-dl through the finance-dl-chromedriver-wrapper console script, which is the default chromedriver_bin value passed to every scraper’s Scraper class in scrape_lib.py.
ChromeDriver, by default, launches your system’s installed version of Chrome — not a bundled one. This is the source of most version-mismatch problems.
Version Mismatch Errors
Resolving a Version Mismatch
Pin chromedriver-binary to match your Chrome
Find your installed Chrome version (This is the most reliable long-term approach when you control Chrome through your system package manager and update it deliberately.
google-chrome --version) and install the matching chromedriver-binary release. The package uses a version number that mirrors Chrome’s major version:Pin Chrome to match chromedriver-binary
Check which ChromeDriver version was installed:Then install or pin the Chrome release that matches that major version. On Debian/Ubuntu, you can hold a specific Chrome version with
apt-mark hold google-chrome-stable after installing the desired release. Use this approach when you prefer to let the Python dependency manage ChromeDriver and keep Chrome in lockstep.Point ChromeDriver at a matching Chrome binary
If you cannot change your default system Chrome, install a second Chrome release (for example, This approach is useful on systems where you cannot easily change the default Chrome installation (e.g., shared machines or CI environments).
google-chrome-beta or a manually downloaded build) that matches the chromedriver_binary version. Then tell ChromeDriver to use it by setting the CHROMEDRIVER_CHROME_BINARY environment variable.You can set this variable at the top of your finance-dl config file so it is applied automatically on every run:scrape_lib.py reads this variable directly when building Chrome options:ChromeDriver Logs
ChromeDriver writes verbose logs to a file controlled by theTMPLOG environment variable. The default path is /tmp/chromedriver.log. To redirect logs to a different location, set the variable before running finance-dl:
Headless Mode and the --visible Flag
All Selenium-based scrapers run headless (no visible window) by default. This is safe for unattended, automated execution. You can override this behaviour at three levels:
-
Per-config — set
headless=Falsein an individualCONFIG_dict. This is appropriate for scrapers likefinance_dl.anthemorfinance_dl.stockplanconnectthat require manual interaction with the browser: -
At the CLI — pass
--visibleto thefinance_dl.clicommand to force a visible browser for that single run, regardless of what the config dict specifies.--interactive(IPython shell mode) also implies--visible. - Automatic retry — if a headless run fails, finance-dl automatically retries with the browser visible. This lets you complete a manual step (such as entering an MFA code) on the retry attempt, after which the scraper continues normally.