HENNGE / arsenic

Async WebDriver implementation for asyncio and asyncio-compatible frameworks
Other
351 stars 54 forks source link

Traceback stating FileNotFoundError #105

Closed kbreit closed 3 years ago

kbreit commented 3 years ago

I am receiving the following exception. However, it does appear Firefox is installed in /usr/bin/.

Traceback (most recent call last):
  File "/usr/local/lib/python3.8/site-packages/uvicorn/protocols/http/httptools_impl.py", line 390, in run_asgi
    result = await app(self.scope, self.receive, self.send)
  File "/usr/local/lib/python3.8/site-packages/uvicorn/middleware/proxy_headers.py", line 45, in __call__
    return await self.app(scope, receive, send)
  File "/usr/local/lib/python3.8/site-packages/fastapi/applications.py", line 179, in __call__
    await super().__call__(scope, receive, send)
  File "/usr/local/lib/python3.8/site-packages/starlette/applications.py", line 111, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/usr/local/lib/python3.8/site-packages/starlette/middleware/errors.py", line 181, in __call__
    raise exc from None
  File "/usr/local/lib/python3.8/site-packages/starlette/middleware/errors.py", line 159, in __call__
    await self.app(scope, receive, _send)
  File "/usr/local/lib/python3.8/site-packages/starlette/exceptions.py", line 82, in __call__
    raise exc from None
  File "/usr/local/lib/python3.8/site-packages/starlette/exceptions.py", line 71, in __call__
    await self.app(scope, receive, sender)
  File "/usr/local/lib/python3.8/site-packages/starlette/routing.py", line 566, in __call__
    await route.handle(scope, receive, send)
  File "/usr/local/lib/python3.8/site-packages/starlette/routing.py", line 227, in handle
    await self.app(scope, receive, send)
  File "/usr/local/lib/python3.8/site-packages/starlette/routing.py", line 41, in app
    response = await func(request)
  File "/usr/local/lib/python3.8/site-packages/fastapi/routing.py", line 182, in app
    raw_response = await run_endpoint_function(
  File "/usr/local/lib/python3.8/site-packages/fastapi/routing.py", line 133, in run_endpoint_function
    return await dependant.call(**values)
  File "./main.py", line 96, in update_prices
    async with get_session(Geckodriver(), browser) as session:
  File "/usr/local/lib/python3.8/site-packages/arsenic/__init__.py", line 16, in __aenter__
    self.session = await start_session(self.service, self.browser, self.bind)
  File "/usr/local/lib/python3.8/site-packages/arsenic/__init__.py", line 28, in start_session
    driver = await service.start()
  File "/usr/local/lib/python3.8/site-packages/arsenic/services.py", line 92, in start
    await self._check_version()
  File "/usr/local/lib/python3.8/site-packages/arsenic/services.py", line 73, in _check_version
    output = await impl.run_process([self.binary, "--version"])
  File "/usr/local/lib/python3.8/site-packages/arsenic/subprocess.py", line 43, in run_process
    process = await asyncio.create_subprocess_exec(
  File "/usr/local/lib/python3.8/asyncio/subprocess.py", line 236, in create_subprocess_exec
    transport, protocol = await loop.subprocess_exec(
  File "uvloop/loop.pyx", line 2749, in subprocess_exec
  File "uvloop/loop.pyx", line 2707, in __subprocess_run
  File "uvloop/handles/process.pyx", line 596, in uvloop.loop.UVProcessTransport.new
  File "uvloop/handles/process.pyx", line 98, in uvloop.loop.UVProcess._init
FileNotFoundError: [Errno 2] No such file or directory

root@priceoff-scraper-6c4f6c6767-79pw7:/app# ls /usr/bin/firefox
/usr/bin/firefox

And here is how I am invoking it.

    browser = Firefox(**{'moz:firefoxOptions': {'args': ['-headless'], 'binary': '/usr/bin/firefox'}})
    async with get_session(Geckodriver(), browser) as session:
ojii commented 3 years ago

The binary it can't find is geckodriver, not firefox. By default it looks for a binary named geckodriver in your PATH, but you can also pass an explicit location as the binary argument to Geckodriver.

kbreit commented 3 years ago

This resolved it, thank you.