Skip to content

page.on("request", f=func) fails if func is a class method -> AttributeError: 'method' object has no attribute '_pw_api_instance' #538

@sla-te

Description

@sla-te

Full traceback:

Traceback (most recent call last):
  File "C:\Users\Administrator\git\playwright_generator\ext\test.py", line 39, in <module>
    asyncio.run(do_work())
  File "C:\Users\Administrator\.pyenv\pyenv-win\versions\3.9.1\lib\asyncio\runners.py", line 44, in run
    return loop.run_until_complete(main)
  File "C:\Users\Administrator\.pyenv\pyenv-win\versions\3.9.1\lib\asyncio\base_events.py", line 642, in run_until_complete
    return future.result()
  File "C:\Users\Administrator\git\playwright_generator\ext\test.py", line 31, in do_work
    page.on(event="request", f=log_request_obj.log_request)
  File "C:\Users\Administrator\git\playwright_generator\venv\lib\site-packages\playwright\_impl\_async_base.py", line 71, in on
    self._impl_obj.on(event, self._wrap_handler(f))
  File "C:\Users\Administrator\git\playwright_generator\venv\lib\site-packages\playwright\_impl\_async_base.py", line 66, in _wrap_handler
    return mapping.wrap_handler(handler)
  File "C:\Users\Administrator\git\playwright_generator\venv\lib\site-packages\playwright\_impl\_impl_to_api_mapping.py", line 91, in wrap_handler
    setattr(handler, INSTANCE_ATTR, wrapper)
AttributeError: 'method' object has no attribute '_pw_api_instance'
Exception ignored in: <function _ProactorBasePipeTransport.__del__ at 0x0000027E70C69B80>
Traceback (most recent call last):
  File "C:\Users\Administrator\.pyenv\pyenv-win\versions\3.9.1\lib\asyncio\proactor_events.py", line 116, in __del__
  File "C:\Users\Administrator\.pyenv\pyenv-win\versions\3.9.1\lib\asyncio\proactor_events.py", line 108, in close
  File "C:\Users\Administrator\.pyenv\pyenv-win\versions\3.9.1\lib\asyncio\base_events.py", line 746, in call_soon
  File "C:\Users\Administrator\.pyenv\pyenv-win\versions\3.9.1\lib\asyncio\base_events.py", line 510, in _check_closed
RuntimeError: Event loop is closed
Exception ignored in: <function BaseSubprocessTransport.__del__ at 0x0000027E70C66280>
Traceback (most recent call last):
  File "C:\Users\Administrator\.pyenv\pyenv-win\versions\3.9.1\lib\asyncio\base_subprocess.py", line 125, in __del__
  File "C:\Users\Administrator\.pyenv\pyenv-win\versions\3.9.1\lib\asyncio\base_subprocess.py", line 70, in __repr__
  File "C:\Users\Administrator\.pyenv\pyenv-win\versions\3.9.1\lib\asyncio\proactor_events.py", line 79, in __repr__
  File "C:\Users\Administrator\.pyenv\pyenv-win\versions\3.9.1\lib\asyncio\windows_utils.py", line 102, in fileno
ValueError: I/O operation on closed pipe
Exception ignored in: <function _ProactorBasePipeTransport.__del__ at 0x0000027E70C69B80>
Traceback (most recent call last):
  File "C:\Users\Administrator\.pyenv\pyenv-win\versions\3.9.1\lib\asyncio\proactor_events.py", line 116, in __del__
  File "C:\Users\Administrator\.pyenv\pyenv-win\versions\3.9.1\lib\asyncio\proactor_events.py", line 108, in close
  File "C:\Users\Administrator\.pyenv\pyenv-win\versions\3.9.1\lib\asyncio\base_events.py", line 746, in call_soon
  File "C:\Users\Administrator\.pyenv\pyenv-win\versions\3.9.1\lib\asyncio\base_events.py", line 510, in _check_closed
RuntimeError: Event loop is closed

Snippet to reproduce:

import asyncio

from playwright.async_api import async_playwright


class LogRequest:
	def __init__(self):
		self.enabled = True

	async def log_request(self, obj):
		if not self.enabled:
			return

		request_details = {
			'request': {
				'method': obj.method,
				'url': obj.url,
				'headers': obj.headers,
				'post_data_text': obj.post_data,
			}
		}
		print(request_details)


async def do_work():
	playwright = await async_playwright().start()
	browser = await playwright.chromium.launch()
	context = await browser.new_context(bypass_csp=True, ignore_https_errors=True)
	page = await context.new_page()
	log_request_obj = LogRequest()
	page.on(event="request", f=log_request_obj.log_request)
	await page.goto("http://whatsmyuseragent.org/")
	await page.screenshot(path="example.png")
	await browser.close()
	await playwright.stop()
	await asyncio.sleep(1)


asyncio.run(do_work())

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions