Unable to Install node dependencies for Browser Library

I’m a complete newbie to Robot Framework and wanted to download the Browser Library to get started and try out some browser test automation.

But whenever I try to run rfbrowser init, it gives me an error message.
At the top it says:
“npm error Exit handler never called!”

In the middle it says:
"Installation directory C:\Users\xxxxx\AppData\Local\Programs\Python\Python313\Lib\site-packages\Browser\wrapper does not contain the required files for. unknown reason. Investigate the npm output and fix possible problems.
Printing contents:"
Followed by a big list of the wrapper directory.

At the end, I get a “Traceback” with error-Lines similar to syntax-mistakes in any IDE, with the final error message being:
“RuntimeError: Problem installing node dependencies.Node process returned with exit status 1”

I assume it has something to do with my workplace wifi or security network, however I couldn’t find any fix online that worked for my issue. (Like downgrading Node/nmp, disabling SSL-Strict mode or reinstalling the robotframework-browser.)
Is there any way to fix this?

how about copy pasting the whole output of your rfbrowser init execution. Really hard to speculate without seeing what the actual error is.

Fair, my bad.
Here is the entire output (|at| is supposed to be an @-Symbol):

"*O:>rfbrowser init

Installing node dependencies…
Installing rfbrowser node dependencies at C:\Users\xxxxx\AppData\Local\Programs\Python\Python313\Lib\site-packages\Browser\wrapper
npm warn config production Use --omit=dev instead.
npm error Exit handler never called!
npm error This is an error with npm itself. Please report this error at:
npm error https://github.com/npm/cli/issues
npm error A complete log of this run can be found in: C:\Users\xxxxxx\AppData\Local\npm-cache_logs\2025-01-08T11_54_47_682Z-debug-0.log

Installing browser binaries to C:\Users\xxxxxx\AppData\Local\Programs\Python\Python313\Lib\site-packages\Browser\wrapper
npx --quiet playwright install
npm error code ETIMEDOUT
npm error errno ETIMEDOUT
npm error network request to https://registry.npmjs.org/playwright failed, reason:
npm error network This is a problem related to network connectivity.
npm error network In most cases you are behind a proxy or have bad network settings.
npm error network
npm error network If you are behind a proxy, please make sure that the
npm error network ‘proxy’ config is set properly. See: ‘npm help config’
npm error A complete log of this run can be found in: C:\Users\xxxxxxx\AppData\Local\npm-cache_logs\2025-01-08T11_57_12_335Z-debug-0.log

======================================================================
Traceback (most recent call last):
File “C:\Users\xxxxx\AppData\Local\Programs\Python\Python313\Lib\site-packages\Browser\entry_main_.py”, line 481, in init
rfbrowser_init(skip_browsers, silent_mode, with_deps, browser)
~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\xxxxxx\AppData\Local\Programs\Python\Python313\Lib\site-packages\Browser\entry_main
.py", line 294, in _rfbrowser_init
process_poller(process, silent_mode)
~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\xxxxx\AppData\Local\Programs\Python\Python313\Lib\site-packages\Browser\entry_main
.py", line 108, in _process_poller
raise RuntimeError(
…<2 lines>…
)
RuntimeError: Problem installing node dependencies.Node process returned with exit status 1

Used Python is: C:\Users\xxxxxx\AppData\Local\Programs\Python\Python313\python.exe
Version: 3.13.1

pip freeze output:
click==8.1.8
colorama==0.4.6
grpcio==1.68.1
grpcio-tools==1.68.1
natsort==8.4.0
overrides==7.7.0
protobuf==5.29.2
robotframework==7.1.1
robotframework-assertion-engine==3.0.3
robotframework-browser==19.1.2
robotframework-pythonlibcore==4.4.1
seedir==0.5.0
setuptools==75.7.0
wrapt==1.17.0

npm version is:n
10.8.2

Installation directory C:\Users\xxxxxx\AppData\Local\Programs\Python\Python313\Lib\site-packages\Browser\wrapper does not contain the required files for. unknown reason. Investigate the npm output and fix possible problems.
Printing contents:
wrapper/
index.js
node_modules/
|at| babel/
code-frame/
helper-validator-identifier/
highlight/
node_modules/
|at| cspotcode/
source-map-support/
|at| esbuild/
aix-ppc64/
android-arm/
android-arm64/
android-x64/
darwin-arm64/
darwin-x64/
freebsd-arm64/
freebsd-x64/
linux-arm/
linux-arm64/
linux-ia32/
linux-loong64/
linux-mips64el/
linux-ppc64/
linux-riscv64/
linux-s390x/
linux-x64/
netbsd-x64/
openbsd-arm64/
openbsd-x64/
sunos-x64/
win32-arm64/
win32-ia32/
win32-x64/
|at| eslint/
config-array/
node_modules/
core/
eslintrc/
node_modules/
js/
object-schema/
plugin-kit/
|at| eslint-community/
eslint-utils/
regexpp/
|at| grpc/
grpc-js/
proto-loader/
|at| humanfs/
core/
node/
node_modules/
|at| humanwhocodes/
module-importer/
retry/
|at| jridgewell/
gen-mapping/
node_modules/
resolve-uri/
set-array/
source-map/
node_modules/
sourcemap-codec/
trace-mapping/
|at| js-sdsl/
ordered-map/
|at| mapbox/
node-pre-gyp/
|at| medv/
finder/
|at| nodelib/
fs.scandir/
fs.stat/
fs.walk/
|at| pkgr/
core/
|at| protobufjs/
aspromise/
base64/
codegen/
eventemitter/
fetch/
float/
inquire/
path/
pool/
utf8/
|at| tsconfig/
node10/
node12/
node14/
node16/
|at| types/
body-parser/
connect/
cookie/
estree/
express/
express-serve-static-core/
history/
http-errors/
json-schema/
mime/
node/
prop-types/
qs/
range-parser/
react/
react-dom/
react-router/
react-router-dom/
send/
serve-static/
strip-comments/
uuid/
|at| typescript-eslint/
eslint-plugin/
parser/
scope-manager/
type-utils/
types/
typescript-estree/
utils/
visitor-keys/
node_modules/
|at| webassemblyjs/
ast/
floating-point-hex-parser/
helper-api-error/
helper-buffer/
helper-numbers/
helper-wasm-bytecode/
helper-wasm-section/
ieee754/
leb128/
utf8/
wasm-edit/
wasm-gen/
wasm-opt/
wasm-parser/
wast-printer/
|at| xtuc/
ieee754/
long/
abbrev/
accepts/
acorn/
acorn-import-attributes/
acorn-jsx/
acorn-loose/
acorn-walk/
agent-base/
ajv/
ajv-keywords/
ansi-escapes/
ansi-regex/
ansi-styles/
aproba/
are-we-there-yet/
arg/
argparse/
array-flatten/
atomic-sleep/
balanced-match/
body-parser/
node_modules/
debug/
media-typer/
mime-db/
mime-types/
ms/
type-is/
brace-expansion/
braces/
browserslist/
buffer-from/
builtin-modules/
bytes/
call-bind/
callsites/
caniuse-lite/
chalk/
chownr/
chrome-trace-event/
cli-cursor/
cli-truncate/
cliui/
node_modules/
emoji-regex/
is-fullwidth-code-point/
string-width/
wrap-ansi/
clsx/
color-convert/
color-name/
color-support/
colorette/
commander/
concat-map/
console-control-strings/
console-grid/
content-disposition/
content-type/
cookie/
cookie-signature/
create-require/
cross-spawn/
csstype/
debug/
deep-is/
define-data-property/
delegates/
depd/
destroy/
detect-libc/
diff/
ee-first/
eight-colors/
electron-to-chromium/
emoji-regex/
encodeurl/
enhanced-resolve/
environment/
es-define-property/
es-errors/
es-module-lexer/
esbuild/
esbuild-node-externals/
escalade/
escape-html/
escape-string-regexp/
eslint/
node_modules/
brace-expansion/
eslint-visitor-keys/
minimatch/
eslint-config-prettier/
eslint-plugin-prettier/
eslint-plugin-sort-imports-es6-autofix/
eslint-scope/
eslint-visitor-keys/
espree/
node_modules/
eslint-visitor-keys/
esprima/
esquery/
esrecurse/
estraverse/
esutils/
etag/
eventemitter3/
events/
execa/
express/
node_modules/
debug/
ms/
fast-deep-equal/
fast-diff/
fast-glob/
node_modules/
glob-parent/
fast-json-stable-stringify/
fast-levenshtein/
fast-redact/
fastq/
file-entry-cache/
fill-range/
finalhandler/
node_modules/
debug/
encodeurl/
ms/
find-up/
flat-cache/
flatted/
foreground-child/
forwarded/
fresh/
fs-minipass/
node_modules/
minipass/
fs.realpath/
fsevents/
function-bind/
gauge/
node_modules/
emoji-regex/
is-fullwidth-code-point/
signal-exit/
string-width/
get-caller-file/
get-east-asian-width/
get-intrinsic/
get-stream/
glob/
node_modules/
brace-expansion/
minimatch/
glob-parent/
glob-to-regexp/
globals/
google-protobuf/
gopd/
graceful-fs/
graphemer/
grpc-tools/
grpc_tools_node_protoc_ts/
node_modules/
google-protobuf/
handlebars/
has-flag/
has-property-descriptors/
has-proto/
has-symbols/
has-unicode/
hasown/
html-escaper/
http-errors/
https-proxy-agent/
human-signals/
husky/
iconv-lite/
ignore/
import-fresh/
imurmurhash/
inflight/
inherits/
ipaddr.js/
is-core-module/
is-extglob/
is-fullwidth-code-point/
is-glob/
is-number/
is-promise/
is-stream/
isexe/
istanbul-lib-coverage/
istanbul-lib-report/
node_modules/
make-dir/
istanbul-reports/
jest-worker/
node_modules/
supports-color/
js-tokens/
js-yaml/
json-buffer/
json-parse-even-better-errors/
json-schema-traverse/
json-stable-stringify-without-jsonify/
keyv/
levn/
lilconfig/
lint-staged/
node_modules/
chalk/
listr2/
loader-runner/
locate-path/
lodash.camelcase/
lodash.merge/
log-update/
node_modules/
ansi-regex/
ansi-styles/
is-fullwidth-code-point/
slice-ansi/
strip-ansi/
long/
loose-envify/
lz-utils/
make-dir/
node_modules/
semver/
make-error/
media-typer/
merge-descriptors/
merge-stream/
merge2/
methods/
micromatch/
mime-db/
mime-types/
mimic-fn/
mimic-function/
minimatch/
minimist/
minipass/
minizlib/
node_modules/
minipass/
mkdirp/
monocart-coverage-reports/
monocart-locator/
ms/
natural-compare/
negotiator/
neo-async/
node-fetch/
node-releases/
nopt/
npm-run-path/
node_modules/
path-key/
npmlog/
object-assign/
object-inspect/
on-exit-leak-free/
on-finished/
once/
onetime/
optionator/
p-limit/
p-locate/
parent-module/
parseurl/
path-exists/
path-is-absolute/
path-key/
path-parse/
path-to-regexp/
picocolors/
picomatch/
pidtree/
pino/
pino-abstract-transport/
pino-std-serializers/
playwright/
playwright-core/
prelude-ls/
prettier/
prettier-linter-helpers/
process-warning/
prop-types/
protobufjs/
proxy-addr/
punycode/
qs/
queue-microtask/
quick-format-unescaped/
randombytes/
range-parser/
raw-body/
node_modules/
iconv-lite/
react/
react-dom/
react-draggable/
react-is/
react-router/
node_modules/
cookie/
react-router-dom/
readable-stream/
real-require/
require-directory/
resolve/
resolve-from/
restore-cursor/
node_modules/
onetime/
reusify/
rfdc/
rimraf/
router/
run-parallel/
safe-buffer/
safe-stable-stringify/
safer-buffer/
scheduler/
schema-utils/
semver/
send/
node_modules/
fresh/
mime-db/
mime-types/
serialize-javascript/
serve-static/
set-blocking/
set-cookie-parser/
set-function-length/
setprototypeof/
shebang-command/
shebang-regex/
side-channel/
signal-exit/
slice-ansi/
node_modules/
ansi-styles/
sonic-boom/
source-map/
source-map-support/
split2/
sprintf-js/
statuses/
string-argv/
string-width/
node_modules/
ansi-regex/
strip-ansi/
string_decoder/
strip-ansi/
strip-comments/
strip-final-newline/
strip-json-comments/
supports-color/
supports-preserve-symlinks-flag/
synckit/
tapable/
tar/
terser/
node_modules/
commander/
terser-webpack-plugin/
node_modules/
|at| jridgewell/
thread-stream/
to-regex-range/
toidentifier/
tr46/
ts-api-utils/
ts-loader/
node_modules/
source-map/
ts-node/
tslib/
tslint/
node_modules/
ansi-styles/
argparse/
brace-expansion/
chalk/
color-convert/
color-name/
commander/
escape-string-regexp/
has-flag/
js-yaml/
minimatch/
mkdirp/
semver/
supports-color/
tslib/
tsutils/
node_modules/
tslib/
turbo-stream/
type-check/
type-is/
typescript/
uglify-js/
undici-types/
unpipe/
update-browserslist-db/
uri-js/
util-deprecate/
utils-merge/
uuid/
v8-compile-cache-lib/
vary/
watchpack/
webidl-conversions/
webpack/
node_modules/
eslint-scope/
estraverse/
mime-db/
mime-types/
webpack-sources/
whatwg-url/
which/
wide-align/
node_modules/
emoji-regex/
is-fullwidth-code-point/
string-width/
word-wrap/
wordwrap/
wrap-ansi/
node_modules/
ansi-regex/
ansi-styles/
strip-ansi/
wrappy/
y18n/
yallist/
yaml/
yargs/
node_modules/
emoji-regex/
is-fullwidth-code-point/
string-width/
yargs-parser/
yn/
yocto-queue/
package-lock.json
package.json
static/
selector-finder.js

Traceback (most recent call last):
File “”, line 198, in _run_module_as_main
File “”, line 88, in run_code
File "C:\Users\xxxxxx\AppData\Local\Programs\Python\Python313\Scripts\rfbrowser.exe_main
.py", line 7, in
sys.exit(cli())
~~~^^
File “C:\Users\xxxxxx\AppData\Local\Programs\Python\Python313\Lib\site-packages\click\core.py”, line 1161, in call
return self.main(*args, **kwargs)
~~~~~~~~~^^^^^^^^^^^^^^^^^
File “C:\Users\xxxxx\AppData\Local\Programs\Python\Python313\Lib\site-packages\click\core.py”, line 1082, in main
rv = self.invoke(ctx)
File “C:\Users\xxxxx\AppData\Local\Programs\Python\Python313\Lib\site-packages\click\core.py”, line 1697, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
File “C:\Users\xxxxxx\AppData\Local\Programs\Python\Python313\Lib\site-packages\click\core.py”, line 1443, in invoke
return ctx.invoke(self.callback, *ctx.params)
~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “C:\Users\xxxxx\AppData\Local\Programs\Python\Python313\Lib\site-packages\click\core.py”, line 788, in invoke
return callback(*args, **kwargs)
File “C:\Users\xxxxx\AppData\Local\Programs\Python\Python313\Lib\site-packages\click\decorators.py”, line 33, in new_func
return f(get_current_context(), *args, **kwargs)
File "C:\Users\xxxxxx\AppData\Local\Programs\Python\Python313\Lib\site-packages\Browser\entry_main
.py", line 489, in init
raise err
File "C:\Users\xxxxxxx\AppData\Local\Programs\Python\Python313\Lib\site-packages\Browser\entry_main
.py", line 481, in init
rfbrowser_init(skip_browsers, silent_mode, with_deps, browser)
~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\xxxxxx\AppData\Local\Programs\Python\Python313\Lib\site-packages\Browser\entry_main
.py", line 294, in _rfbrowser_init
process_poller(process, silent_mode)
~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\xxxxxxxx\AppData\Local\Programs\Python\Python313\Lib\site-packages\Browser\entry_main
.py", line 108, in _process_poller
raise RuntimeError(
…<2 lines>…
)
RuntimeError: Problem installing node dependencies.Node process returned with exit status 1"

Thats the error. NPM cannot connect to internet. This happens if npm doesn’t know about the possible http/https proxy settings.

See instructions here; node.js - Is there a way to make npm install (the command) to work behind proxy? - Stack Overflow

And the value you should use instead of http://proxy_host:port should be provided to you by your IT admin.

If there’s no proxy available, in order to make that work, change networks to something that allows internet access.