#python #puppeteer #python-asyncio #pyppeteer
#python #puppeteer #python-asyncio #pyppeteer
Вопрос:
Мое соединение с pyppeteer неожиданно закрылось, и это привело к зависанию моей программы на Python вместо завершения работы и правильной регистрации ошибки. Кто-нибудь знает, как правильно перехватить это исключение и правильно выйти из программы Python?
Вот часть моего сценария:
async def _proxy_browser(self, url, headless = False):
args = []
for i in range(5):
try:
browser = await launch(headless = headless,
args = args,
defaultViewport = None)
page = await browser.newPage()
await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:83.0) Gecko/20100101 Firefox/83.0')
await page.goto(url, {'waitUntil' : 'domcontentloaded'})
time.sleep(5)
content = await page.content()
return content
except (pyppeteer.errors.PageError, pyppeteer.errors.TimeoutError) as e:
print('error', e)
time.sleep(2)
continue
finally:
time.sleep(1)
await browser.close()
return
def proxy_browser_request(self, url, headless = False):
loop = asyncio.get_event_loop()
response = loop.run_until_complete(self._proxy_browser(url, headless))
return response
Вот обратная трассировка, которую я получил:
[E:pyppeteer.connection] connection unexpectedly closed
Task exception was never retrieved
future: <Task finished name='Task-1379' coro=<Connection._async_send() done, defined at C:UsersnameAppDataLocalProgramsPythonPython38libsite-packagespyppeteerconnection.py:69> exception=InvalidStateError('invalid state')>
Traceback (most recent call last):
File "C:UsersnameAppDataLocalProgramsPythonPython38libsite-packagespyppeteerconnection.py", line 73, in _async_send
await self.connection.send(msg)
File "C:UsersnameAppDataLocalProgramsPythonPython38libsite-packageswebsocketsprotocol.py", line 567, in send
await self.write_frame(True, opcode, data)
File "C:UsersnameAppDataLocalProgramsPythonPython38libsite-packageswebsocketsprotocol.py", line 1083, in write_frame
await self.ensure_open()
File "C:UsersnameAppDataLocalProgramsPythonPython38libsite-packageswebsocketsprotocol.py", line 803, in ensure_open
raise self.connection_closed_exc()
websockets.exceptions.ConnectionClosedError: code = 1006 (connection closed abnormally [internal]), no reason
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:UsersnameAppDataLocalProgramsPythonPython38libsite-packagespyppeteerconnection.py", line 79, in _async_send
await self.dispose()
File "C:UsersnameAppDataLocalProgramsPythonPython38libsite-packagespyppeteerconnection.py", line 170, in dispose
await self._on_close()
File "C:UsersnameAppDataLocalProgramsPythonPython38libsite-packagespyppeteerconnection.py", line 151, in _on_close
cb.set_exception(_rewriteError(
asyncio.exceptions.InvalidStateError: invalid state
Комментарии:
1. безголовый = False — так что же происходит в браузере, запускается ли он и загружает страницу или что вы можете увидеть, когда возникает эта ошибка?
Ответ №1:
Предположим, что статус 1006 сообщает вам, что сайт может понять — ваш сеанс автоматизирован и прерывает ваше соединение с ws, вам нужно поиграть с аргументами Chrome или попробовать расширение pyppeteer stealth (оно портировано на python — используйте Google)