kaliiiiiiiiii / CDP-Socket

socket for handling chrome-developer-protocol connections
MIT License
13 stars 3 forks source link

Task was destroyed but it is pending! error #27

Closed Zeprix closed 5 months ago

Zeprix commented 5 months ago

Full error:

Task was destroyed but it is pending!
task: <Task pending name='Task-247' 
coro=<SingleCDPSocket._handle_callback.<locals>.async_handle() done, 
defined at C:\Users\PC\AppData\Local\Programs\Python\Python311\Lib\site-packages\cdp_socket\socket.py:178> 
wait_for=<_GatheringFuture pending cb=[Task.task_wakeup()]>>
Code ```python import asyncio from selenium_driverless import webdriver from selenium_driverless.scripts.network_interceptor import NetworkInterceptor options = webdriver.ChromeOptions() async def task(driver): await driver.get('https://github.com', wait_load=False) async def RequestBlocker(): async with await webdriver.Chrome(options=options) as driver: while True: await driver.get('https://google.com') driver3 = await driver.new_window('tab') async with NetworkInterceptor(driver3) as interceptor: await task(driver3) await asyncio.sleep(2) async for data in interceptor: if data.request.url == "https://collector.github.com/github/collect": await data.fail_request('TimedOut') print('Request Blocked') break await driver3.close() asyncio.run(RequestBlocker()) ```

Minimal code to reproduce:

import asyncio
from selenium_driverless import webdriver
from selenium_driverless.scripts.network_interceptor import NetworkInterceptor

async def main():
    async with await webdriver.Chrome() as driver:
        while True:
            tab = await driver.new_window('tab')
            async with NetworkInterceptor(tab) as interceptor:
                asyncio.ensure_future(tab.get('https://httpbin.org/get', wait_load=False))
                async for data in interceptor:
                    await data.fail_request('TimedOut')
                    print('Request Blocked')
                    break
                await tab.close()

asyncio.run(main())

OS: Windows 10 22H2 Chrome Version: 124.0.6367.62 selenium_driverless.version: 1.9.1 cdp_socket.__version: 1.2.7 Python version: 3.11

EDIT by @kaliiiiiiiiii

kaliiiiiiiiii commented 5 months ago

Will look into it

kaliiiiiiiiii commented 5 months ago

issue occurs due to https://docs.python.org/3/library/asyncio-task.html#asyncio.create_task

Save a reference to tasks passed to this function, to avoid a task disappearing mid-execution. The event loop only keeps weak references to tasks. A task that isn’t referenced elsewhere may get garbage collected at any time, even before it’s done.