Почему перехват запросов в pyppeteer не работает?

#python #pyppeteer

Вопрос:

Минимальный пример:

 import asyncio

from pyppeteer import launch
from pyppeteer.network_manager import Request
from pyppeteer_stealth import stealth

browser = await launch()
page = await browser.newPage()
await stealth(page=page)

async def intercept_network_request(request: Request):
    print(request.url)
    await request.continue_()

await page.setRequestInterception(value=True)
page.on(event='request', f=lambda req: asyncio.ensure_future(intercept_network_request(req)))

response = await page.goto(url='https://google.com/')
 

выход:

 request url: <https://www.google.com/>

---------------------------------------------------------------------------
TimeoutError                              Traceback (most recent call last)
<ipython-input-2-8ccaf6c1ef45> in <module>
----> 1 response = await page.goto(url='https://google.com')
      2 # await page.screenshot({'path': 'example.png'})

~/Documents/jupyter/.venv/lib/python3.9/site-packages/pyppeteer/page.py in goto(self, url, options, **kwargs)
    883         error = result[0].pop().exception()  # type: ignore
    884         if error:
--> 885             raise error
    886 
    887         request = requests.get(mainFrame._navigationURL)

TimeoutError: Navigation Timeout Exceeded: 30000 ms exceeded.
 

Независимо от того, куда я иду, я не получаю ни одного загруженного запроса. Все работает без перехвата запросов. В чем может быть проблема?

Ответ №1:

Отключите скрытое уклонение агента пользователя:

 await stealth(page, ['user_agent_override'])
 

См.: https://github.com/berstend/puppeteer-extra/issues/421