Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

OSError: [Errno 9] Bad file descriptor with playwright #666

Open
5 of 7 tasks
Zackoswald opened this issue Nov 27, 2024 · 0 comments
Open
5 of 7 tasks

OSError: [Errno 9] Bad file descriptor with playwright #666

Zackoswald opened this issue Nov 27, 2024 · 0 comments

Comments

@Zackoswald
Copy link

Zackoswald commented Nov 27, 2024

Issues

GitHub issues are for bugs. If you have questions, please ask them on the mailing list.

Checklist

  • Does your title concisely summarize the problem?
  • Did you include a minimal, reproducible example?
  • What OS are you using?
  • What version of Dramatiq are you using?
  • What did you do?
  • What did you expect would happen?
  • What happened?

What OS are you using?

Windows10

What version of Dramatiq are you using?

Dramatiq 1.17.1

What did you do?

I try to set up a task that get cookies from chrome opened by playwright, but it turn out to be failed that showing error: OSError: [Errno 9] Bad file descriptor, how can i solve this problem

What did you expect would happen?

expect to open up a chrome browser(not headless mode) but it failed

What happened?

Traceback (most recent call last):
File "C:\Users\administrator\anaconda3\envs\python3.11\Lib\site-packages\dramatiq\worker.py", line 487, in process_message
res = actor(*message.args, **message.kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\administrator\anaconda3\envs\python3.11\Lib\site-packages\dramatiq\actor.py", line 185, in call
return self.fn(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\administrator\Desktop\j\study\huey\config.py", line 35, in start_get_cookies
File "C:\Users\administrator\Desktop\j\study\huey\config.py", line 38, in start_get_cookies2
def start_get_cookies():
^^^^^^^^^^^^^
File "C:\Users\administrator\Desktop\j\study\huey\config.py", line 42, in get_cookies
def start_get_cookies2():
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\administrator\anaconda3\envs\python3.11\Lib\site-packages\playwright\sync_api_context_manager.py", line 77, in enter
dispatcher_fiber.switch()
File "C:\Users\administrator\anaconda3\envs\python3.11\Lib\site-packages\playwright\sync_api_context_manager.py", line 56, in greenlet_main
self._loop.run_until_complete(self._connection.run_as_sync())
File "C:\Users\administrator\anaconda3\envs\python3.11\Lib\asyncio\base_events.py", line 654, in run_until_complete
return future.result()
^^^^^^^^^^^^^^^
File "C:\Users\administrator\anaconda3\envs\python3.11\Lib\site-packages\playwright_impl_connection.py", line 263, in run_as_sync
await self.run()
File "C:\Users\administrator\anaconda3\envs\python3.11\Lib\site-packages\playwright_impl_connection.py", line 272, in run
await self._transport.connect()
File "C:\Users\administrator\anaconda3\envs\python3.11\Lib\site-packages\playwright_impl_transport.py", line 133, in connect
raise exc
File "C:\Users\administrator\anaconda3\envs\python3.11\Lib\site-packages\playwright_impl_transport.py", line 120, in connect
self._proc = await asyncio.create_subprocess_exec(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\administrator\anaconda3\envs\python3.11\Lib\asyncio\subprocess.py", line 223, in create_subprocess_exec
transport, protocol = await loop.subprocess_exec(
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\administrator\anaconda3\envs\python3.11\Lib\asyncio\base_events.py", line 1708, in subprocess_exec
transport = await self._make_subprocess_transport(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\administrator\anaconda3\envs\python3.11\Lib\asyncio\windows_events.py", line 399, in _make_subprocess_transport
transp = _WindowsSubprocessTransport(self, protocol, args, shell,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\administrator\anaconda3\envs\python3.11\Lib\asyncio\base_subprocess.py", line 36, in init
self._start(args=args, shell=shell, stdin=stdin, stdout=stdout,
File "C:\Users\administrator\anaconda3\envs\python3.11\Lib\asyncio\windows_events.py", line 929, in _start
self._proc = windows_utils.Popen(
^^^^^^^^^^^^^^^^^^^^
File "C:\Users\administrator\anaconda3\envs\python3.11\Lib\asyncio\windows_utils.py", line 153, in init
super().init(args, stdin=stdin_rfd, stdout=stdout_wfd,
File "C:\Users\administrator\anaconda3\envs\python3.11\Lib\subprocess.py", line 992, in init
errread, errwrite) = self._get_handles(stdin, stdout, stderr)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\administrator\anaconda3\envs\python3.11\Lib\subprocess.py", line 1403, in _get_handles
errwrite = msvcrt.get_osfhandle(stderr)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
OSError: [Errno 9] Bad file descriptor

there is a demo i created to replay the error

from playwright.sync_api import sync_playwright

import dramatiq
from dramatiq.brokers.redis import RedisBroker
from dramatiq.results import Results
from dramatiq.results.backends import RedisBackend

CONF_REDIS = {
'host': '127.0.0.1',
'port': 6379,
'db': 5,
'decode_responses': False,
'encoding': 'utf-8',
'max_connections': 10,
}

backend = RedisBackend()
redis_broker = RedisBroker(**CONF_REDIS)
redis_broker.add_middleware(Results(backend=backend))
dramatiq.set_broker(redis_broker)

class HTTPTimeout(Exception):
pass

def should_retry(retries_so_far, exception):
return retries_so_far < 3 and isinstance(exception, HTTPTimeout)

@dramatiq.actor(retry_when=should_retry, store_results=True)
def send_message(message):
print(f'received message: {message}')
return f"backend received {message}"

@dramatiq.actor
def start_get_cookies():
start_get_cookies2()

def start_get_cookies2():
get_cookies()

def get_cookies():
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
context = browser.new_context()
context.clear_cookies()
page = context.new_page()
page.goto('https://www.google.com')

if name == "main":
# res_msg = send_message.send('hello world').get_result(block=True)
# print(res_msg)

res = start_get_cookies.send().get_result(block=True)
print(res)

it cannot work both with playwright.sync_playwright or playwright.async_playwright

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant