HENNGE / arsenic

Async WebDriver implementation for asyncio and asyncio-compatible frameworks
Other
349 stars 52 forks source link

Decrease output to stdout #68

Open bruckbond opened 5 years ago

bruckbond commented 5 years ago

Hello, I've already seen this THIS issue But using the code from there I still have no success on Win 10 and Ubuntu 18. Can anyone help me with decreasing output? The code, I'm using, is:

async def parser():
    import os
    browser = browsers.Chrome(chromeOptions={'args': ['--whitelisted-ips', '--headless', '--disable-gpu', '--no-sandbox']})
    async with get_session(services.Chromedriver(log_file=os.devnull), browser) as session:
        await session.get("https://www.google.com")
ojii commented 5 years ago

See this comment and this comment in the linked issue. the log_file argument to a driver only controls the output of the driver, not of arsenic itself. arsenic uses structlog for logging, so you need to follow its instructions for controlling output.

bruckbond commented 5 years ago

See this comment and this comment in the linked issue. the log_file argument to a driver only controls the output of the driver, not of arsenic itself. arsenic uses structlog for logging, so you need to follow its instructions for controlling output.

using construction like this:

    service = services.Geckodriver(log_file=os.devnull)
    async with get_session(Geckodriver(service), Firefox()) as session:

I receive this output:

Traceback (most recent call last):
  File "all_in_one.py", line 325, in pushka
    await parser()
  File "all_in_one.py", line 371, in parser
    async with get_session(Geckodriver(service), Firefox()) as session:
  File "/usr/local/lib/python3.7/dist-packages/arsenic/__init__.py", line 16, in __aenter__
    self.session = await start_session(self.service, self.browser, self.bind)
  File "/usr/local/lib/python3.7/dist-packages/arsenic/__init__.py", line 28, in start_session
    driver = await service.start()
  File "/usr/local/lib/python3.7/dist-packages/arsenic/services.py", line 96, in start
    self.log_file,
  File "/usr/local/lib/python3.7/dist-packages/arsenic/services.py", line 34, in subprocess_based_service
    process = await impl.start_process(cmd, log_file)
  File "/usr/local/lib/python3.7/dist-packages/arsenic/subprocess.py", line 57, in start_process
    *cmd, stdout=log_file, stderr=log_file, stdin=DEVNULL
  File "/usr/lib/python3.7/asyncio/subprocess.py", line 217, in create_subprocess_exec
    stderr=stderr, **kwds)
  File "/usr/lib/python3.7/asyncio/base_events.py", line 1533, in subprocess_exec
    bufsize, **kwargs)
  File "/usr/lib/python3.7/asyncio/unix_events.py", line 190, in _make_subprocess_transport
    **kwargs)
  File "/usr/lib/python3.7/asyncio/base_subprocess.py", line 37, in __init__
    stderr=stderr, bufsize=bufsize, **kwargs)
  File "/usr/lib/python3.7/asyncio/unix_events.py", line 763, in _start
    universal_newlines=False, bufsize=bufsize, **kwargs)
  File "/usr/lib/python3.7/subprocess.py", line 728, in __init__
    errread, errwrite) = self._get_handles(stdin, stdout, stderr)
  File "/usr/lib/python3.7/subprocess.py", line 1359, in _get_handles
    c2pwrite = stdout.fileno()
AttributeError: 'Geckodriver' object has no attribute 'fileno'
ojii commented 5 years ago

You can't pass a driver to a driver. Try this instead


    service = services.Geckodriver(log_file=os.devnull)
    async with get_session(service, Firefox()) as session: