在 selenium 4.0.0rc1 上测试,使用 chromedriver v94(最新于 2021 年 9 月 21 日)。
import trio # async library that selenium uses
from selenium import webdriver
async def start_listening(listener):
async for event in listener:
print(event)
async def main():
driver = webdriver.Chrome()
async with driver.bidi_connection() as connection:
session, devtools = connection.session, connection.devtools
# await session.execute(devtools.fetch.enable())
await session.execute(devtools.network.enable())
# listener = session.listen(devtools.fetch.RequestPaused)
listener = session.listen(devtools.network.ResponseReceived)
async with trio.open_nursery() as nursery:
nursery.start_soon(start_listening, listener) # start_listening blocks, so we run it in another coroutine
driver.get('https://google.com')
trio.run(main)
需要注意的几点:
- 不幸的是,它目前似乎不起作用
Fetch.requestPaused
。Fetch.enable
发送命令并暂停请求,但似乎 selenium 从未收到该RequestPaused
事件。(这就是代码片段使用的原因Network.responseReceived
)
- 该类没有文档
devtools
,但您仍然可以查看源 .py 文件以获取可用属性。