我正在为我尝试新事物,使用谷歌 colab 中的剧作家。
这种组合需要/强制异步编程。
我有一个上下文管理器,它能够处理名为“登录”的登录和注销。效果很好!
我试图访问的内部页面有数据集,没有链接,只有 div 可以点击。
定位器(我相信)工作正常,当与我假设的 .element_handles() 结合使用时应该返回多个元素。
from playwright.async_api import async_playwright
import asyncio
from IPython.display import Image
import nest_asyncio
nest_asyncio.apply()
# browser is set to webkit in the Login() context manager
...
async def loop_over_datasets(browser=None, page=None):
print("starting")
datasets = page.locator("div.horizontal.clickable")
print("continuing")
datasets = await asyncio.gather(datasets.element_handles())
for ds in datasets:
print(f'inside the loop, ds is {ds}')
print("doesn't get here in tact")
# for each dataset I want to launch a new page where the dataset is clicked but I'll settle for sync programming at this point.
# new_page = await ds.click()
# ds_page = await browser.new_page(new_page)
# ds_page.click()
async def get_all_new_info():
async with Login() as (b,l):
await loop_over_datasets(browser=b,page = l)
asyncio.run(get_all_new_info()) #has to be killed manually or it will run forever.
在这条线上datasets = await asyncio.gather(datasets.element_handles())
gather()
实际上没有工作await
并且await
永远不会返回,这意味着我没有“进入循环......”。
没有await
我得到“ds”变量,但它不是我能做的任何事情。
这个应该怎么用?