У меня есть следующий фрагмент кода, который загружает страницу и следует по ссылке внутри нее, используя asyncio.gather
, как рекомендовано в документации для метода щелчка :
import asyncio
import pyppeteer
async def main(selector):
browser = await pyppeteer.launch()
page = await browser.newPage()
await page.goto("https://example.org")
result = await asyncio.gather(
page.waitForNavigation(),
page.click(selector),
)
result = next(filter(None, result))
if result and isinstance(result, pyppeteer.network_manager.Response):
print(result.status, result.url)
if __name__ == "__main__":
loop = asyncio.get_event_loop()
loop.run_until_complete(main(selector="a"))
Это чудесно, когда метод click
вызывает событие навигации:
200 https://www.iana.org/domains/reserved
Но я пытаюсь написать обобщенный код c, который может обрабатывать любой селектор, даже те, которые не вызывают навигацию , Если я переключаю селектор на «h1», я получаю следующий тайм-аут, потому что нет навигации, чтобы ждать:
Traceback (most recent call last):
File "stackoverflow.py", line 20, in <module>
loop.run_until_complete(main(selector="h1"))
File "/usr/lib/python3.6/asyncio/base_events.py", line 484, in run_until_complete
return future.result()
File "stackoverflow.py", line 12, in main
page.click(selector),
File "/.../lib/python3.6/site-packages/pyppeteer/page.py", line 938, in waitForNavigation
raise error
pyppeteer.errors.TimeoutError: Navigation Timeout Exceeded: 30000 ms exceeded.
Я не смог найти способ определить, будет ли событие click
произвести дополнительный запрос, чтобы избежать звонка Page.waitForNavigation
. Является ли это возможным? Заранее спасибо за ваше время!