У меня есть pyppeteer
код, который просматривает.Давайте предположим, что он нажимает только на теги a
.
Он отлично работает на моей локальной машине с Windows, но ломается всякий раз, когда я запускаю его удаленно на сервере Linux.Тот же conda env
, тот же код.
Соответствующая часть моего кода, упрощенно, выглядит так:
async def act(self):
element = self.element
async def get_action():
tag_name = await self.page.evaluate(
'elem => { return elem.tagName.toLowerCase(); }',
element)
action = None
if tag_name == 'a':
action = element.click()
else:
action = async_pass()
return action
async def get_action_future():
# gather syntax based on:
# https://miyakogi.github.io/pyppeteer/reference.html#pyppeteer.page.Page.click
action = await get_action()
future_action = asyncio.gather(
action,
asyncio.sleep(0.001), # dirty, dirty work-around, doesn't work nicely otherwise
)
waited_future = await asyncio.shield(future_action)
if waited_future[0] is None:
await self.page.waitForNavigation(self.wait_options)
return None
await get_action_future()
На моем компьютере с Windows все работает нормально.Когда я запускаю его на компьютере с Linux, все начинается нормально, независимо от того, есть ли навигация или нет.Затем, после нескольких щелчков мышью, я получаю тайм-аут, затем еще одну ошибку:
Error encountered: Navigation Timeout Exceeded: 20000 ms exceeded.
# then I trigger the element selector and the act method again, wrapped in try/except
Error encountered: Protocol Error (Runtime.callFunctionOn): Session closed. Most likely the page has been closed.
Я на некоторое время застрял в этой проблеме и был бы признателен за любую помощь!
Моя среда включает в себя: python=3.6, pyppeteer=0.0.25
.
Кстати: я заметил, что этот вопрос имеет аналогичную ошибку .НО ошибка другая (Protocol error (Page.navigate): Target closed
вместо Protocol Error (Runtime.callFunctionOn)
), а также среда (node.js
, Puppeteer
и т. Д.).