What’s New in Firefox 147?

Firefox 147 is a quiet release for scraping overall, but the BiDi updates and Linux-facing changes are worth knowing about.
Firefox
browser
web scraping
Published

2026/01/24

Firefox 147 reached the stable release channel on 13 January 2026. If your scraping stack is mostly requests, httpx and a bit of HTML parsing, this version won’t change your life. If you drive Firefox through Playwright, Selenium or raw WebDriver BiDi, there are a few updates worth paying attention to.

I’m only looking at the parts that seem highly relevant to scraping. The official references are the release notes and the developer release notes. LWN also has a useful release summary for the Linux-facing items.

WebDriver BiDi Gets More Useful

The most important Firefox 147 changes for scrapers are in the BiDi layer.

  • script.evaluate and script.callFunction now bypass Content Security Policy (CSP);
  • emulation.setLocaleOverride now also overrides the Accept-Language header;
  • emulation.setScreenSettingsOverride can emulate screen dimensions;
  • browsingContext.navigate with wait=none now reports the real target URL; and
  • Firefox now emits input.fileDialogOpened when a page opens a file picker.

The CSP change is the biggest one for me. If you use BiDi directly to inject helper code into a page, strict CSP used to be one more place where things could get weird. Firefox 147 removes that friction, which makes page-context probing more reliable on locked-down sites.

The locale override is also easy to miss, but genuinely useful. Before this change you could end up with a split personality browser: one locale in the automation layer and another one in the outbound headers. Firefox 147 closes that gap, so locale-sensitive scraping should behave more coherently when sites negotiate content from Accept-Language.

The screen-settings override matters when a target site changes layout or behaviour according to screen metrics. That is useful for responsive layouts, screenshot capture and the general business of making a browser look less like a cardboard cut-out.

Finally, the redirect fix for browsingContext.navigate with wait=none is a good boring fix. Those are my favourite kind. If you let navigation return early and then inspect where the browser is actually heading, getting the real target URL is much better than getting something adjacent to the truth.

The new input.fileDialogOpened event is a smaller addition, but it is useful when you automate file uploads or when you want better telemetry around a site that suddenly drops into a native file picker.

These BiDi features will land in Playwright and Selenium at their own pace, so the immediate value is highest if you already talk to Firefox through raw BiDi or through tooling that exposes the newer commands quickly.

Strict ETP Can Now Interrupt Local Network Probes

If you run Firefox with Strict ETP, Firefox 147 may start interrupting requests you barely knew were happening. Sites that poke at localhost or other devices on your LAN can now trigger a permission prompt or get blocked outright.

For most scraping jobs you won’t notice this at all. But when you do notice it, it can look like a random permission popup or a mysteriously broken request path. That’s relevant if your target site tries to discover printers, media devices, router services or some strange local helper process.

This also matters from the fingerprinting side. Mozilla’s support article is explicit that these checks are there to stop sites from probing local apps and devices without your knowledge. That is good privacy engineering and mildly annoying automation engineering, which is usually how these things go.

If you run hardened Firefox profiles for scraping, it is worth checking the about:config preferences behind this feature before you assume a site is broken:

  • network.lna.enabled;
  • network.lna.blocking;
  • network.lna.block_trackers; and
  • network.lna.skip-domains.

I wouldn’t disable these casually, but they are the first place I’d look in a controlled test environment.

Linux Setups Need A Quick Audit

Firefox 147 also adds support for the XDG Base Directory Specification. Mozilla’s note is short, so I wouldn’t pretend there is a fully documented migration story here. But if you’ve got Linux helper scripts rummaging around in ~/.mozilla/, check them before they bite you.

This matters most when you still have code that looks for profiles under paths like ~/.mozilla/firefox/*.default*, and when you:

  • copy cookies or preferences straight off disk;
  • mount profile directories into containers; or
  • create and recycle Linux browser profiles programmatically.

If you already launch Firefox with an explicit profile path then this may not matter much. If you have scripts with hard-coded home-directory paths, now is a good time to read them with a slightly suspicious expression.

Better Rendering For Visual Workflows

The LWN summary also points to a fix for rendering on fractionally scaled Wayland desktops. That is not a general scraping feature. It is, however, relevant if your workflow depends on screenshots, OCR, visual diffing or click coordinates.

For plain DOM extraction, ignore it. For visual automation, sharper rendering and more predictable geometry are exactly the sort of unglamorous improvements that save you from debugging nonsense later.

Conclusion

Firefox 147 is not a blockbuster scraping release. The real value is lower down the stack: better BiDi behaviour, tighter handling of local-network probes and a couple of Linux changes that can affect profile management and screenshot-heavy automation.

If you already have a Firefox scraping setup, I’d check three things first:

  • whether your tooling exposes the newer BiDi commands cleanly;
  • whether strict-ETP profiles are going to trigger local-network prompts; and
  • whether any Linux housekeeping scripts still hard-code ~/.mozilla/ paths.

Previous updates: Firefox 146 and Firefox 145.

Sources