| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| 0.18.0 source code.tar.gz | 2026-08-20 | 300.2 kB | |
| 0.18.0 source code.zip | 2026-08-20 | 401.9 kB | |
| README.md | 2026-08-20 | 5.0 kB | |
| Totals: 3 Items | 707.1 kB | 2 | |
Added
Ferrum::Browseroption:protocol_timeoutbounds individual internal CDP bookkeeping calls, e.g.Target.createTarget,Target.attachToTarget. It's a separate setting from:timeout: its default (5s) happens to match:timeout's own default, but passingtimeout:toBrowser.newdoes not change it -- set:protocol_timeout(or theFERRUM_PROTOCOL_TIMEOUTenv var) explicitly for a different value.Ferrum::Page#pdf/#screenshotaccept atimeout:argument (default 60s) for the CDP call itself. Generating a full-page screenshot or a large PDF is a known slow outlier among CDP commands.Ferrum::Frame#loader_idprovides a loader id when the frame navigates [#583]Ferrum::Frame#lifecycle_eventsprovides a list of frame's events like init, networkIdle, firstPaint, etc. [#583]Ferrum::Frame#idle?whether frame was loaded [#583]page.accessibilityAPI andNode#axnodefor reading the CDP accessibility tree--no-crashpadis now included in the default Chrome flags, fully disabling the crashpad handler process [#610]- Support for dedicated/shared Workers and Service Workers [#391], [#388]:
Ferrum::Worker-- a lightweight connection to a Worker's single execution context, with its own#network,#evaluate/#evaluate_async/#execute, and#on(:request)/#on(:auth)for interception.- Dedicated and shared workers spawned by a page are discovered and connected to automatically and are reachable
through
Browser#workers/Context#workers. - Service workers are discovered too, through
Browser#service_workers/Context#service_workers, but aren't connected to by default. Attaching to one keeps it alive forever, so that's opt-in viaContext#attach_target, thentarget.worker. Ferrum::Target#worker?,#shared_worker?,#service_worker?, and#parent_idfor telling targets apart.
Fixed
Ferrum::Clientcommand id generation andFerrum::Client::WebSocket's driver interactions were not thread-safe, allowing concurrent commands to collide on the same id or corrupt the frame stream; both are now serialized under a mutex [#602]Ferrum::Networkbuilt duplicateExchangeobjects for the same request whenNetwork.requestWillBeSent(regular event thread) andFetch.requestPaused(priority interruption thread) raced to look up/create the exchange for a request id; the find-or-build is now atomic, fixing intermittentlynilExchange#requeston blocked/intercepted requestsFerrum::Node#type/Ferrum::Keyboardnow trigger the select-all editing shortcut (Ctrl/Cmd+A) by naming the CDPcommandsfield, so selecting and replacing text in inputs and contenteditables works.Ferrum::Network::InterceptedRequest#match?no longer coerces string blacklist/whitelist patterns containing regexp metacharacters (e.g.?,.) into regexps; string patterns are now compared literally instead. [#405], [#604]Ferrum::Network::AuthRequest#match?andFerrum::Dialog#match?received the same fix as [#604] above for consistency. String patterns now compare literally: exact-match for requests/auth requests, substring-match for dialog messages. [#405]Target.targetCreatedhandler for an iframe target reusing an already-connected target raisedNoMethodErroronFerrum::Browser#new(flatten: false), since it readsession_idoff the target's underlyingFerrum::Client, which doesn't expose it in that mode; it now readsTarget#session_iddirectly. [#539]Ferrum::Node#select_filenow uses the stablebackendNodeIdinstead. [#568], [#611]- Full-page screenshots no longer resize the window, preventing focus steal on macOS [#580]
- DOM.enable is now has
includeWhitespace: "all"to keep track of new line nodes, which previously were resolved to 0, and errored with NodeNotFoundError [#596] DOM.requestNodecall is moved to the node class and being done lazily, this reduces the number of intermediate node ids sent by backend to frontend [#596]- Fix
contextcan be nilable in ensure Browser#create_page [#582] Ferrum::Page#idling?no longer blocks onloading="lazy"iframes that Chrome never starts loading [#583]
Changed
Ferrum::PendingConnectionsErrorandFerrum::TimeoutErrorwere swallowed even though it happens when a traffic iterator results in an empty array. [#583]webrickis no longer a runtime dependency. It is only required byFerrum::Proxy, so addgem "webrick"to your Gemfile if you use it.- Logger output for
Runtime.consoleAPICallednow includes the console API type and stack trace call frames, not just the argument values [#605] Ferrum::Browseroption:pending_connection_errorsis set to false by default
Removed
webrickruntime dependency dropped from the gemspec.Ferrum::Proxystill needs it, so addgem "webrick"to your Gemfile if you use the proxy server.